<!-- PÁGINA PRINCIPAL --> <!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floristería</title>
<link rel="stylesheet" href="../CSS/estilos.css">
<link rel="icon" href="../IMG/logo_floristeria-removebg-preview.png" type="icon/jpg">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Great+Vibes&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="../hq-countdown-timer/hq-countdown-timer.min.js"></script>
</head>
<body id="body">
<header>
<div class="centrar">
<nav>
<figure class="figure_logo">
<img src="../IMG/logo_floristeria-removebg-preview.png" alt="img logo de floristeria">
<p class="nombre_floristeria">Floristería López</p>
</figure>
<ul class="ul_nav">
<a href="../HTML/inicioSesion.html">
<li class="li_nav">Inicio Sesión/
<span class="small_let">Regístrate</span>
</li>
</a>
<li class="li_nav cesta">
<button popovertarget="my_popover" id="icono_cesta1">
<i class="fa-solid fa-bag-shopping" title="Cesta de compra"></i>
<div class="mostrar_cantidad_en_cesta">0</div>
</button>
</li>
</ul>
<!-- Cesta -->
<div id="my_popover" popover>
<h3 class="h3_cesta">Cesta de Compra</h3>
<p id="mensaje_no_hay_articulos">No tienes artículos en la cesta</p>
<form action="" id="form_cesta" method="post"></form>
<div class="footer_cesta">
<p>Total : <span class="total_cesta">0.00 €</span></p>
<hr>
<button id="pagar">Realizar compra</button>
</div>
</div>
<!-- Cesta -->
<!-- MENU DESPLEGABLE -->
<div id="div_menu">
<div class="div_icons">
<i class="fa-solid fa-bars" id="menu_icon" title="Menú"></i>
<i class="fa-solid fa-x" id="close_icon"></i>
</div>
<ul id="dropDown_box">
<li class="options"><a href="../HTML/inicioSesion.html"><i class="fa-solid fa-user"></i>Inicia
Sesión</a></li>
<li class="options"><button popovertarget="my_popover" id="icono_cesta2"><i
class="fa-solid fa-bag-shopping" title="Cesta de compra"></i>Tu cesta</button></li>
</ul>
</div>
</nav>
<section class="description">
<h1>Floristería López</h1>
<p>Lorem ipsum<ins>dolor sit amet</ins> consectetur adipisicing elit. Omnis
fuga a fugit, porro earum eveniet ipsum temporibus sequi
eligendi non at illo, quia veritatis hic error amet rem minus placeat.</p>
<a href="/HTML/blog.html" class="btn">Saber más</a>
</section>
</div>
</header>
<main id="main">
<div class="centrar">
<ul class="ul_main">
<a href="#dinamic_div"><li class="btn" id="btn_flores"> Flores</li></a>
<a href="#dinamic_div"><li class="btn" id="btn_eventos">Eventos</li></a>
<a href="#dinamic_div"><li class="btn" id="btn_cestas">Cestas</li></a>
<a href="../HTML/crealoTuMismo.html" target="_blank"><li class="btn">Créalo tú...</li></a>
<a href="#dinamic_div"><li class="btn" id="btn_ramos">Ramos</li></a>
<a href="#dinamic_div"><li class="btn" id="btn_regalos">Regalos</li></a>
<a href="#dinamic_div"><li class="btn" id="ofertas">Ofertas</li></a>
</ul>
<section id="dinamic_section">
<div class="container_carousel">
<div class="over_flow">
<i class="fa-solid fa-angle-left" id="left_arrow_carr"></i>
<ul id="ul_carousel">
<li class="li_carousel">
<div class="description_carousel">
<h2>Ramos con búcaros</h2>
<h3>Escoge tu ramo y búcaro</h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Ullam adipisci veritatis, voluptas ratione at doloribus
officia dolorum quod quae vero ab minus error voluptatem.
</p>
<div class="div_btn_carousel">
<button class="btn_carousel">Ver</button>
</div>
</div>
<figure class="img_carousel">
<img src="../IMG/bucaro flores.avif" alt="imagen de bucaro con flores">
</figure>
</li>
<li class="li_carousel">
<div class="description_carousel">
<h2>Crea tu cesta</h2>
<h3>Así de fácil:</h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Ullam adipisci veritatis, voluptas ratione at doloribus
officia dolorum quod quae vero ab minus error voluptatem.
</p>
<div class="div_btn_carousel">
<button class="btn_carousel">Ver</button>
</div>
</div>
<figure class="img_carousel">
<img src="../IMG/cesta flors y dulces.jpg" alt="imagen de cesta con flores y dulces">
</figure>
</li>
<li class="li_carousel activo">
<div class="description_carousel">
<h2>Decoración de eventos</h2>
<h3>Un día especial con decoración especial</h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Ullam adipisci veritatis, voluptas ratione at doloribus
officia dolorum quod quae vero ab minus error voluptatem.
</p>
<div class="div_btn_carousel">
<button class="btn_carousel">Ver</button>
</div>
</div>
<figure class="img_carousel">
<img src="../IMG/boda.jpg" alt="imagen de un evento de boda">
</figure>
</li>
<li class="li_carousel">
<div class="description_carousel">
<h2>Crea tu propio ramo</h2>
<h3>Así de fácil:</h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Ullam adipisci veritatis, voluptas ratione at doloribus
officia dolorum quod quae vero ab minus error voluptatem.
</p>
<div class="div_btn_carousel">
<button class="btn_carousel">Ver</button>
</div>
</div>
<figure class="img_carousel">
<img src="../IMG/flores sueltas.jpg" alt="imagen de flores sueltas">
</figure>
</li>
<li class="li_carousel">
<div class="description_carousel">
<h2>Crea tu propio ramo</h2>
<h3>Así de fácil:</h3>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
Ullam adipisci veritatis, voluptas ratione at doloribus
officia dolorum quod quae vero ab minus error voluptatem.
</p>
<div class="div_btn_carousel">
<button class="btn_carousel">Ver</button>
</div>
</div>
<figure class="img_carousel">
<img src="../IMG/flores sueltas.jpg" alt="imagen de flores sueltas">
</figure>
</li>
</ul>
<i class="fa-solid fa-angle-right" id="right_arrow_carr"></i>
</div>
</div>
<div id="dinamic_div">
<h1 id="dinamic_title"></h1>
<p id="description"></p>
<div id="countdown">
<h3>Últimos minutos:</h3>
<div class="hq-countdown" data-target-date="2025-12-31T23:59:59">
<div class="hq-countdown-item">
<div class="hq-number hq-days">00</div>
<div class="hq-label">Days</div>
</div>
<div class="hq-countdown-item">
<div class="hq-number hq-hours">00</div>
<div class="hq-label">Hours</div>
</div>
<div class="hq-countdown-item">
<div class="hq-number hq-minutes">00</div>
<div class="hq-label">Minutes</div>
</div>
<div class="hq-countdown-item">
<div class="hq-number hq-seconds">00</div>
<div class="hq-label">Seconds</div>
</div>
</div>
</div>
<div id="div_container">
<!-- javascript -->
</div>
<hr class="hr">
</div>
</section>
</div>
</main>
<footer>
<div class="centrar">
<ul class="ul_footer">
<li class="li_footer">
<h4>¿Dónde estamos?</h4>
<a>
<i class="fa-solid fa-location-dot"></i>
<p>Avenida San Pedro,18, local 1,Benidorm,Spain</p>
</a>
</li>
<li class="li_footer">
<h4>Contactos</h4>
<a href="tel:618307291"><i class="fa-brands fa-whatsapp"></i>604107211</a>
<a href="mailto:chalo45@gmail.com"><i
class="fa-regular fa-envelope"></i>otaolachalo@gmail.com</a>
<a href="tel:968723456"><i class="fa-solid fa-phone"></i>968723456</a>
</li>
<li class="li_footer">
<h4>Documentos Legales</h4>
<a href="#">Política de privacidad</a>
<a href="#">Aviso Legal</a>
<a href="#">Política de cookies</a>
</li>
</ul>
</div>
</footer>
<!-- para el countdown de ofertas -->
<script>
$(document).ready(function () {
$('.hq-countdown').hqCountdownTimer({
endMessage: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check"><polyline points="20 6 9 17 4 12"/></svg> Countdown Completed!',
onEnd: function () {
console.log('Countdown finished!');
}
});
});
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-1VDDWMRSTH"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-1VDDWMRSTH');
</script>
<script>
try {
fetch(new Request("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", { method: 'HEAD', mode: 'no-cors' })).then(function (response) {
return true;
}).catch(function (e) {
var carbonScript = document.createElement("script");
carbonScript.src = "//cdn.carbonads.com/carbon.js?serve=CK7DKKQU&placement=wwwjqueryscriptnet";
carbonScript.id = "_carbonads_js";
document.getElementById("carbon-block").appendChild(carbonScript);
});
} catch (error) {
console.log(error);
}
</script>
<!-- fin del countdown -->
<script src="../JS/productos.js"></script>
<script src="../JS/programa.js"></script>
<script src="../JS/carrito.js"></script>
</body>
</html>
<!-- PÁGINA DE INICIO DE SESIÓN -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floristería-Inicio de Sesión</title>
<link rel="icon" href="/IMG/img icon.jpg">
<link rel="stylesheet" href="../CSS/inicioSesion.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body>
<div id="form_main_container">
<div class="div_container" id='div_container_login'>
<form class="form" id="form_login">
<h1>Inicia Sesión</h1>
<div class="div_input">
<input type="email" id="input_email" class="input" required data-boolean="false">
<label for="input_email">Correo electrónico</label>
<div class="div_icon">
<i class="fa-solid fa-envelope icon" ></i>
</div>
<p class="error_message">No está registrado o la escritura es incorrecta</p>
</div>
<div class="div_input">
<input type="password" id="input_password" class="input" required maxlength="20" data-boolean="false">
<label for="input_password">Contraseña</label>
<div class="div_icon">
<i class="fa-solid fa-lock icon" ></i>
</div>
<p class="error_message">La contraseña es incorrecta</p>
</div>
<div class="div_recordar">
<input type="checkbox" name="chekbox_password" id="input_recordar1" data-boolean="false">
<label for="input_recordar">Recuerdame la contraseña</label>
</div>
<div class="div_btn">
<button type="submit">Entrar</button>
</div>
<div class="div_lost_password_no_account">
<a href="#">¿No recuerdas la contraseña?</a>
<p>¿No tienes cuenta?<span class="span" id="enlace_registro">Regístrate</span></p>
</div>
</form>
</div>
<div class="div_container" id="div_container_register">
<form action="#" class="form" id="form_register">
<h1>Regístrate</h1>
<div class="div_input">
<input type="text" id="input_full_name" class="input" required data-boolean="false">
<label for="input_full_name">Nombre y Apellidos</label>
<div class="div_icon">
<i class="fa-solid fa-user icon " ></i>
</div>
<p class="error_message">Solo caracteres alfabéticos, no símbolos ni números (!@$%&123 etc...)</p>
</div>
<div class="div_input">
<input type="email" id="input_create_email" class="input" required data-boolean="false">
<label for="input_create_email">Correo electrónico</label>
<div class="div_icon">
<i class="fa-solid fa-envelope icon"></i>
</div>
<p class="error_message">No existe esta dirección de correo electrónico</p>
</div>
<div class="div_input">
<input type="tel" id="input_tel" class="input" required maxlength="9" data-boolean="false">
<label for="input_tel">Teléfono</label>
<div class="div_icon">
<i class="fa-solid fa-phone icon"></i>
</div>
<p class="error_message">No admite letras solo caracteres numéricos</p>
</div>
<div class="div_input">
<input type="password" id="input_create_password" class="input" required maxlength="20" data-boolean="false">
<label for="input_create_password">Crear una contraseña</label>
<div class="div_icon">
<i class="fa-solid fa-lock icon"></i>
</div>
<p class="error_message">
Para mayor seguridad la contraseña de be contener:<br>
✔Contener al menos 8 caracteres.<br>
✔Al menos una mayúscula.<br>
✔Al menos un número.<br>
✔Al menos un símbolo.<br>
</p>
</div>
<div class="div_input">
<input type="password" id="input_confirm_password" class="input" required maxlength="20" data-boolean="false">
<label for="input_confirm_password">Confirmar contraseña</label>
<div class="div_icon">
<i class="fa-solid fa-lock icon "></i>
</div>
<p class="error_message">La contraseña debe ser igual</p>
</div>
<div class="div_recordar">
<input type="checkbox" name="chekbox_password" id="input_recordar">
<label for="input_recordar">Recuerdame la contraseña</label>
</div>
<div class="div_btn">
<button type="submit">Registrarme</button>
</div>
<div class="div_lost_password_no_account">
<p>¿Ya estás registrado?<span class="span" id="enlace_incio_sesion">Iniciar Sesión</span></p>
</div>
</form>
</div>
</div>
<script src="../JS/inicioSesion.js"></script>
</body>
</html>
<!-- PÁGINA DE PAGO -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="stylesheet" href="../CSS/pagar.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Great+Vibes&display=swap" rel="stylesheet">
<title>Pago de artículos</title>
</head>
<body>
<div id="div_container">
<header>
<div class="caja_header">
<figure>
<img src="../IMG/tarjetas de credito.png" alt="imagen de tarjetas de crédito">
</figure>
<div>
<h1>Sección de pago</h1>
<p>Empresa receptora: <span class="font_title">Floristería López</span></p>
</div>
</div>
</header>
<main>
<aside>
<ol id="div_list_aside">
<li class="li_1 active">1.Resumen</li>
<li class="li_2">2.Datos de envío</li>
<li class="li_3">3.Datos de tarjeta</li>
<li class="li_4">4.Recibo</li>
</ol>
</aside>
<article id="article">
<div id="loading" data-value="0">
<div class="centrar">
<p>REALIZANDO EL PAGO</p>
<div class="caja_punticos">
<img class="punticos" src="../IMG/flor loading.png">
<img class="punticos" src="../IMG/flor loading.png">
<img class="punticos" src="../IMG/flor loading.png">
<img class="punticos" src="../IMG/flor loading.png">
<img class="punticos" src="../IMG/flor loading.png">
</div>
<p>Espere por favor</p>
</div>
</div>
<section id="section_resumen">
<h2>Resumen de tu carrito</h2>
<p>Vas a realizar la compra de los siguientes productos:</p>
<div class="alinear">
<div class="padre_resumen_dinamico">
<div id="div_section_resumen"><!-- javascript --></div>
<div class="resumen_footer">
<hr>
<p>Subtotal : <span id="subtotal_resumen"></span></p>
<p>Precio de Envío : <span id="precio_envio">3.50 €</span></p>
<p>Impuestos IVA% : <span id="impuesto_iva"></span></p>
<p>Total a pagar : <span id="total_pagar_resumen"></span></p>
<hr>
<button id="pagar_resumen">Confirmo datos correctos</button>
</div>
</div>
<div id="contenedor_nota_regalo">
<div id="cerrar_mensaje" title="cerrar mensaje">X</div>
<p>Escribe el mensaje para el regalo</p>
<p class="indicaciones_mensaje">
El mensaje no puede contener más
de 100 caracteres incluyendo espacios.
</p>
<textarea name="mensaje_regalo" id="textarea_mensaje_regalo" maxlength="100" rows="5"
placeholder="Escribe aquí..."></textarea>
<button id="btn_guardar_mensaje">Guardar</button>
</div>
</div>
</section>
<section id="section_datos_envio">
<h2>Datos de envío</h2>
<div id="div_section_datos_envio">
<form action="" id="form_datos_envio">
<div>
<label for="input_envio_nomb_apell">Nombre y Apellidos *</label>
<input type="text" id="input_envio_nomb_apell" required maxlength="30">
<div class="ms_error">
<p>Solo admite letras y espacios</p>
</div>
</div>
<div>
<label for="input_envio_direcc">Dirección *</label>
<input type="text" id="input_envio_direcc" required maxlength="30">
</div>
<div>
<label for="input_provincia">Provincia *</label>
<select name="" id="input_provincia" required>
<option value="" disabled selected></option>
<option value="Valencia">Valencia</option>
<option value="Madrid">Madrid</option>
<option value="Badajoz">Badajoz</option>
<option value="Almeria">Almería</option>
<option value="Sevilla">Sevilla</option>
<option value="Ciudad_real">Ciudad Real</option>
</select>
</div>
<div>
<label for="input_cp">Código Postal *</label>
<input type="number" id="input_cp" name="cp" required oninput="limitLength(event,8)">
</div>
<div>
<label for="input_telefono">Teléfono *</label>
<div class="contenedor_codig_y_num">
<div id="desplegable_codigo_pais">
<div class="placeholder_fake option" id="cambiante">
<img src="../IMG/españa.png" alt="icono_españa">
<span>+34 </span>
<i class="fa-solid fa-play girar"></i>
</div>
<ul id="ul_country_code">
<li class="option" title="España">
<img src="../IMG/españa.png" alt="icono_españa" title="España">
<span>+34</span>
</li>
<li class="option" title="Francia">
<img src="../IMG/francia.png" alt="icono_francia" title="Francia">
<span>+33</span>
</li>
<li class="option" title="Reino Unido">
<img src="../IMG/reino-unido.png" alt="icono_reino_unido"
title="Reino Unido">
<span>+44</span>
</li>
<li class="option" title="Italia">
<img src="../IMG/italia.png" alt="icono_italia" title="Italia">
<span>+39</span>
</li>
<li class="option" title="Alemania">
<img src="../IMG/alemania.png" alt="icono_alemania" title="Alemania">
<span>+49</span>
</li>
<li class="option" title="Noruega">
<img src="../IMG/noruega.png" alt="icono_noruega" title="Noruega">
<span>+47</span>
</li>
</ul>
</div>
<input type="number" id="input_telefono" required oninput="limitLength(event,9)">
</div>
</div>
<div>
<p class="p_observaciones">Observaciones para el envío</p>
<textarea name=" nota_cliente" cols="40" rows="5" maxlength="150"
placeholder="Escribe aquí..."></textarea>
</div>
<button type="submit" id="guardar_direcc"> Guardar dirección</button>
</form>
</div>
</section>
<section id="section_datos_tarjeta">
<h2>Datos de la tarjeta</h2><!-- utilizar display grid aquí -->
<form action="" id="form_datos_tarjeta" method="post">
<h4>Seleccione su tipo de tarjeta:</h4>
<div class="div_icono_tarjetas">
<div>
<input type="radio" name="icon_card" id="visa">
<label for="visa"><img src="../IMG/visa.png" alt="icono tarjeta visa"></label>
</div>
<div>
<input type="radio" name="icon_card" id="mastercard">
<label for="mastercard"><img src="../IMG/mastercard.png"
alt="icono tarjeta mastercard"></label>
</div>
<div>
<input type="radio" name="icon_card" id="american_express">
<label for="american_express"><img src="../IMG/american express.png"
alt="icono tarjeta american express"></label>
</div>
<div>
<input type="radio" name="icon_card" id="carnet">
<label for="carnet"><img src="../IMG/carnet.jpg" alt="icono tarjeta carnet"></label>
</div>
</div>
<div class="div_inputs_info">
<div class="div_izquierdo">
<div>
<label for="input_nombre">Nombre del titular</label>
<input type="text" id="input_nombre" required maxlength="28">
<div class="ms_error">
<p>Solo admite letras y espacios</p>
</div>
</div>
<div>
<label for="input_apellidos">Apellidos del titular</label>
<input type="text" id="input_apellidos" required maxlength="35">
<div class="ms_error">
<p>Solo admite letras y espacios</p>
</div>
</div>
<div>
<label for="input_numero_tarjeta">Número de tarjeta</label>
<input type="number" id="input_numero_tarjeta" required
oninput="limitLength(event,16)" placeholder="4675 8976 8765 1234">
<div class="ms_error">
<p>Solo admite números</p>
</div>
</div>
<div>
<label for="input_expiracion">Expiración (mm/yy)</label>
<input type="month" id="input_expiracion" required>
<div class="ms_error">
<p>Solo admite números</p>
</div>
</div>
<div>
<label for="input_c_seguridad">Código de seguridad (CVV)</label>
<input type="number" id="input_c_seguridad" oninput="limitLength(event,3)" required>
<div class="ms_error">
<p>Solo admite números</p>
</div>
</div>
<div>
<label for="input_email">Email</label>
<input type="email" id="input_email" required>
</div>
</div>
<div class="div_derecho">
<img src="../IMG/tarjeta.webp" alt="imagen de tarjeta de crédito">
<div class="cuadrototal">
<p>Total de la compra:</p>
<hr>
<p id="mostrar_total_pago2">546</p>
</div>
</div>
</div>
<button type="submit" id="btn_pagar_banco">PAGAR <i
class="fa-regular fa-credit-card"></i></button>
</form>
</section>
<section id="section_recibo">
<div id="div_section_recibo">
<h2> Recibo de pago</h2>
<div class="centrar_recibo">
<span>Fecha:</span><span id="fecha_compra"></span>
<p>Nº de Envío: <span id="numero_envio"></span></p>
<div>
<h3>Emisor:</h3>
<p class="font_title">Floristería López</p>
</div>
<div>
<p class="info_entrega_envio">El envío se entregará el <span id="plazo_entrega"></span>
a la siguiente dirección:</p>
<p id="direcc_entreg"></p>
</div>
</div>
</div>
</section>
</article>
</main>
</div>
</body>
<script src="../JS/pago.js"></script>
</html>
<!-- PÁGINA CRÉALO TU MISMO -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floristería López - Créalo tu mismo</title>
<link rel="stylesheet" href="../CSS/crealoTuMismo.css">
</head>
<body id="body">
<header>
<div class="centrar">
<h1>Crea tu ramo de flores</h1>
<div class="flores_escogidas">
<!-- JAVASCRIPT, deben venir ya las flores que escogió en la sección de flores,
poner allí un botón de 'Para crear ramo' y otro para 'Añadir a cesta' -->
</div>
<form action="" >
<h3>Escoge dónde colocarás tus flores </h3>
<div class="opciones">
<div class="caja" >
<input type="radio" name="opcion" id="cesta" checked>
<label for="cesta" id="cestas">
<img src="../IMG/cesta1.jpg" alt="cesta">
<p>Cestas</p>
</label>
</div>
<div class="caja">
<input type="radio" name="opcion" id="molde">
<label for="molde" id="moldes">
<img src="../IMG/moldecorazón.jpg" alt="molde espuma">
<p>Molde de espuma</p>
</label>
</div>
<div class="caja">
<input type="radio" name="opcion" id="jarron">
<label for="jarron" id="jarrones">
<img src="../IMG/jarron1.webp" alt="jarron">
<p>Jarrón</p>
</label>
</div>
<div class="caja">
<input type="radio" name="opcion" id="envoltura">
<label for="envoltura" id="envolturas">
<img src="../IMG/hojasenvolturadeflores4.jpg" alt="plastico">
<p>Envoltura de flores</p>
</label>
</div>
</div>
<hr>
</form>
</div>
</header>
<main>
<div class="centrar">
<form class="mostrar_opcion"><!-- JS, mostrar los colores de la opción seleccionada -->
<!-- DINÁMICO posiblemente para que aperezca una opción tengo que hacer aquí la opción de las cestas -->
<h2 id="titulo_opcion"></h2>
<div id="opciones_seleccion"></div>
<div id="contenedor_dinamico">
<h3 id="h3"></h3>
<div id="mostrar"></div>
</div>
</form>
</div>
</main>
<script src="../JS/productos.js"></script>
<script src="../JS/crealoTuMismo.js"></script>
</body>
</html>
/* ESTILOS PRINCIPALES */
@import url(../CSS/dinamicMenu.css);
@import url(../CSS/carrito.css);
/* ESTILOS GLOBALES */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande',
'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
scroll-behavior: smooth;
}
a {
text-decoration: none;
color: black;
}
ul {
list-style: none;
}
body {
width: 100%;
height: 100vh;
position: relative;
}
#body{
width: 100%;
height: 100vh;
position: relative;
}
.centrar {
max-width: 1200px;
margin: auto;
}
:root {
--darkPink-color: rgba(245, 107, 157, 0.514);
--mediumPink-color: rgba(236, 141, 228, 0.514);
--btn-letter-color:rgb(253, 252, 252);
--golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
--box-shadow-golden: #BF953F;
--purple-color: rgb(243, 98, 243);
--black-color: rgb(10, 10, 10);
}
/* HEADER */
header {
width: 100%;
padding: 10px;
background: url(../IMG/fondo\ prueba3.jpeg);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
position: relative;
overflow: hidden;
}
.figure_logo {
width: 50%;
max-width: 200px;
min-width: 100px;
height: 130px;
text-align: center;
border-radius: 27px;
padding: 3px 20px;
position: relative;
}
.figure_logo img {
width: 80%;
position: absolute;
z-index: 0;
left: 0;
}
.nombre_floristeria {
/* background: url(../IMG/fondo\ titulo\ letras.jpg);
background-clip: text;
-webkit-text-fill-color: transparent; */
font-family: "Great Vibes", serif;
font-weight: 600;
font-style: normal;
font-size: 25px;
line-height: 20px;
position: absolute;
z-index: 10;
bottom: 0;
left: 0;
padding: 6px;
color: rgb(252, 251, 249);
}
nav {
width: 100%;
display: flex;
justify-content: space-between;
}
.ul_nav {
width: 100%;
height: 30px;
margin:20px 0px 0px 10px;
display: flex;
justify-content: flex-end;
gap: 70px;
align-items: center;
}
.small_let {
font-size: 13px;
}
.li_nav {
margin-left: 15px;
color: var(--btn-letter-color);
background-color:var(--box-shadow-golden);
cursor: pointer;
border-radius: 15px 2px 15px 15px;
padding: 10px 20px;
}
.cesta button {
position: relative;
}
.mostrar_cantidad_en_cesta{
width: 17px;
height: 17px;
border-radius: 50%;
display:flex;
justify-content: center;
align-items:center ;
position: absolute;
top: -6px;
right: -13px;
font-size: 60%;
color: #f9f9f7;
background: rgb(94, 93, 93);
}
.ul_nav li i {
font-size: 20px;
color: var(--btn-letter-color);
}
/* nav desplegable */
#div_menu {
width: 100%;
max-width: 500px;
display: none;
padding:6px;
position: absolute;
right: 0;
z-index: 3;
}
.decoration {
backdrop-filter: blur(10px);
border-radius: 6px;
border: 1px solid var(--mediumPink-color);
}
.div_icons {
height: 10px;
position: relative;
}
.div_icons i{
font-size: 22px;
cursor: pointer;
}
#close_icon, #menu_icon {
display: none;
position: absolute;
right: 10px;
top: 0;
}
#menu_icon{
font-size: 25px;
}
.displayblock {
display: none;
}
#dropDown_box {
display: none;
}
.options {
padding: 6px 0px 6px 20px;
}
.options i{
margin-right: 15px;
font-size: 20px;
}
.options button{
background-color: transparent;
border: none;
font-size: 16px;
color: white;
}
.options:hover {
cursor: pointer;
background-color: var(--darkPink-color);
}
.options a{
color:white;
}
.description {
display: flex;
flex-direction: column;
gap: 25px;
text-align: center;
border-radius: 10px;
color: white;
padding: 10px;
width: 100%;
max-width: 500px;
margin: 10px auto;
animation: backShowup 1.3s ease-in-out 1.3s forwards;
}
.description h1 {
font-family: "Great Vibes", serif;
font-size: 3em;
transform: translateX(calc(100vw + 10px));
animation: showup 1.5s ease-in-out forwards;
}
.description p {
transform: translateX(calc(-100vw - 10px));
animation: showup 1.5s ease-in-out 0.7s forwards;
}
.description a {
transform: translateY(calc(200% + 10px));
max-width: 200px;
margin: auto;
animation: showup 1.5s ease-in-out 1.4s forwards;
color: rgb(252, 251, 251);
}
@keyframes showup {
to {
transform: translate(0%, 0%);
}
}
@keyframes backShowup {
to {
backdrop-filter: blur(10px);
box-shadow: 0px 0px 5px 0px var(--box-shadow-golden);
}
}
.a_description:hover {
background-color: var(--mediumPink-color);
}
.description p {
font-size: 12px;
margin: 4px 0px 10px 0px;
}
/* MAIN */
#main {
width: 100%;
padding: 10px 0;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
/* flex: 1; */
}
#main .centrar {
display: flex;
flex-direction: column;
gap: 20px;
}
.ul_main {
width: 100%;
max-width: 1100px;
margin: auto;
display: flex;
justify-content: space-between;
}
.btn {
cursor: pointer;
padding: 10px 15px;
border-radius: 15px 2px 15px 15px;
background: var(--box-shadow-golden);
color: var(--btn-letter-color);
transition: .3s;
}
.btn:hover {
scale: 1.1;
}
/* BTN-OFERTAS */
#ofertas {
background: rgb(209, 77, 77);
}
.span_oferta {
font-size: 12px;
font-weight: bold;
}
/* countdown */
#countdown{
display: none;
}
:root {
--primary: #282829;
--secondary: rgba(241, 119, 119, 0.829);
--glass: rgba(255, 255, 255, 0.1);
--shadow: 0 8px 32px rgba(29, 30, 39, 0.678);
}
.hq-countdown {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
display: flex;
justify-content: space-around;
width: 100%;
max-width: 400px;
padding: 3px;
margin: auto;
border-radius: 5px;
backdrop-filter: blur(10px);
transition: all 0.3s ease;
}
.hq-countdown-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 10px 20px;
background: linear-gradient(145deg, var(--primary), var(--secondary));
border-radius: 7px;
backdrop-filter: blur(5px);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: transform 0.3s ease;
box-shadow: var(--shadow);
}
.hq-countdown-item:hover {
transform: translateY(-5px);
}
.hq-number {
font-size: 20px;
font-weight: 700;
background: linear-gradient(45deg, #fff, #e0e7ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.hq-label {
color: rgba(255, 255, 255, 0.9);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 500;
}
/* Ended state */
.hq-ended {
background: linear-gradient(145deg, #ef4444, #dc2626);
animation: pulse 1.5s infinite;
}
.hq-ended .hq-countdown-item {
background: rgba(255, 255, 255, 0.15);
}
.hq-countdown-ended {
color: white;
font-size: 1.5rem;
font-weight: 600;
padding: 2rem;
display: flex;
align-items: center;
gap: 0.75rem;
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.02);
}
100% {
transform: scale(1);
}
}
/* SECTION DINAMIC_CONTENT */
#dinamic_section {
width: 100%;
}
.container_carousel {
width: 100%;
padding: 10px;
background-position: center;
display: flex;
justify-content: center;
align-items: center;
}
.over_flow {
width: 100%;
max-width: 600px;
display: flex;
align-items: center;
gap: 20px;
}
.over_flow i {
font-size: 3em;
font-weight: bold;
}
#ul_carousel {
width: 100%;
display: flex;
gap: 50px;
padding: 4px;
overflow: hidden;
color: #000000;
}
.li_carousel {
display: flex;
width: 100%;
flex-shrink: 0;
border: 1px solid var(--mediumPink-color);
border-radius: 7px;
padding: 4px;
transition: 1s;
}
.description_carousel {
width: 60%;
display: flex;
flex-direction: column;
justify-content: space-around;
gap: 15px;
}
.description_carousel h2 {
font-size: 25px;
}
.description_carousel h3 {
font-size: 15px;
}
.description_carousel p {
font-size: 12px;
padding: 6px 0px;
}
.div_btn_carousel {
width: 100px;
margin: 0 auto;
}
.btn_carousel {
width: 100%;
padding: 6px;
border: none;
background-color: var(--box-shadow-golden);
border-radius: 7px;
font-size: 15px;
}
.img_carousel {
width: 40%;
display: flex;
justify-content: center;
align-items: center;
}
.img_carousel img {
width: 100%;
border-radius: 7px;
aspect-ratio: 1;
}
/* FLORES */
#div_container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
justify-items: center;
align-items: center;
}
.caja-flor {
width: 100%;
height: 100%;
max-height: 400px;
max-width: 250px;
border: 1px solid rgb(211, 210, 210);
border-radius: 7px;
padding: 7px;
display: flex;
align-items: center;
flex-direction: column;
gap: 8px;
}
.caja-flor img {
width: 100%;
max-width: 160px;
border-radius: 7px;
object-fit: cover;
aspect-ratio: 1;
}
.caja-flor button {
width: 80%;
max-width: 100px;
background-color: var(--box-shadow-golden);
color:var(--btn-letter-color);
padding: 8px 0px;
border-radius: 7px;
border: none;
outline: none;
cursor: pointer;
}
.caja-flor p {
font-size: 12px;
}
/* OFERTAS */
.hr{
margin: 50px;
}
/* FOOTER */
footer {
background: var(--darkPink-color);
width: 100%;
padding: 3px;
}
.ul_footer {
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
.li_footer {
max-width: 200px;
margin: 6px auto;
display: flex;
flex-direction: column;
justify-content: space-around;
}
.li_footer a{
display: flex;
align-items: center;
gap: 5px;
}
#icon {
border-radius: 100%;
}
/* MEDIA QUERIES */
/* @media (max-width:600px) {
#div_menu {
display: block;
padding: 2px;
}
#menu_icon {
display: block;
}
.ul_carousel {
width: 90%;
}
.ul_nav {
display: none;
}
.options {
padding: 3px;
}
.div_description h2 {
font-size: 15px;
}
}
*/
@media (max-width:1000px) {
.ul_main{
padding: 4px;
margin: auto;
max-width: 800px;
display: grid;
grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
gap: 10px;
}
.ul_main li{
text-align: center;
}
#div_menu {
display: block;
}
#menu_icon {
display: block;
}
.ul_carousel {
width: 90%;
}
.ul_nav {
display: none;
}
.div_description h2 {
font-size: 15px;
}
.li_footer{
font-size: calc(100% - 5px);
}
}
/* INICIO DE SESIÓN */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
color: white;
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}
a {
text-decoration: none;
}
:root {
--darkPink-color: rgba(245, 107, 157, 0.514);
--mediumPink-color: rgba(236, 141, 228, 0.514);
--btn-letter-color: rgb(253, 252, 252);
--purple-color: rgb(243, 98, 243);
--black-color: rgb(10, 10, 10);
--golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
--box-shadow-golden: #BF953F;
}
body {
background: url(../IMG/fondo\ prueba3.jpeg);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
display: flex;
justify-content: center;
align-items: center;
}
#form_main_container {
width: 100%;
max-width: 370px;
text-align: center;
overflow: hidden;
display: flex;
gap: 60px;
margin-top: 30px;
}
.div_container {
width: 100%;
height: 100%;
flex-shrink: 0;
padding: 10px;
}
#div_container_login,
#div_container_register {
transition: 1s;
}
.form {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-around;
backdrop-filter: blur(40px);
border-radius: 10px;
font-size: 14px;
}
.form h1 {
margin: 20px 0px 6px 0px;
}
.div_input {
position: relative;
margin: 10px 0px;
padding: 10px;
}
.error_message {
font-size: 10px;
text-align: left;
display: none;
}
.styles_error_message {
display: block;
color: rgb(235, 5, 5);
font-weight: bold;
}
.error_message.styles_error_message{
background-color:rgba(255, 0, 0, 0.411) ;
color: white;
margin-top: 3px;
}
.style_right_icon {
color: rgb(33, 136, 33);
}
.input {
border: none;
outline: none;
background-color: transparent;
height: 20px;
width: 100%;
border-bottom: 2px solid white;
}
.style_right_input {
border-bottom: 2px solid rgb(33, 136, 33);
}
.div_icon {
width: 15px;
height: 15px;
position: absolute;
display: grid;
place-items: center;
top: 5px;
right: 0;
margin-right: 15px;
}
.div_input label {
transition: .2s;
font-size: 14px;
position: absolute;
left: 0;
margin-left: 10px;
}
.div_input input:focus~label,
.div_input input:valid~label {
transform: translateY(-110%);
font-size: 10px;
}
.div_btn {
width: 70%;
height: 30px;
max-width: 300px;
margin: 0 auto;
overflow: hidden;
border-radius: 7px;
cursor: pointer;
position: relative;
}
.div_btn button {
position: absolute;
width: 100%;
height: 100%;
left: 0;
border: none;
outline: none;
padding: 7px;
background-color: transparent;
cursor: pointer;
z-index: 1;
transition: .2s;
}
.div_btn::before {
position: absolute;
top: 0;
left: 0;
content: '';
width: 110%;
height: 60px;
background: linear-gradient(180deg, var(--box-shadow-golden), rgb(240, 220, 130), var(--box-shadow-golden), rgb(240, 220, 130));
transition: .3s;
z-index: 0;
}
.div_btn:hover::before {
transform: translateY(-40%);
}
.div_btn:hover button {
text-transform: uppercase;
letter-spacing: 1px;
font-weight: bold;
}
.div_recordar,
.div_btn {
margin: 7px auto;
}
.div_lost_password_no_account {
margin: 20px 0px;
}
.span {
font-weight: bold;
color: rgb(129, 75, 5);
padding: 6px;
cursor: pointer;
}
.span:hover {
color: var(--box-shadow-golden);
}
/* MENÚ DINÁMICO */
#dinamic_div {
width: 100%;
max-width: 1100px;
margin: 40px auto 0px;
padding: 20px 30px;
text-align: center;
}
#div_container {
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
gap: 15px;
}
#dinamic_title {
font-size: 40px;
margin-bottom: 4px;
}
#description {
text-align: left;
font-size: 13px;
margin: 10px auto 60px;
max-width: 600px;
}
.caja {
width: 100%;
max-width: 200px;
border-radius: 7px;
margin: 0 auto;
border: 1px solid rgb(206, 203, 203);
}
.figure_render {
width: 100%;
}
.figure_render img {
width: 100%;
aspect-ratio: 1;
border-radius: 7px;
}
.div_description {
width: 100%;
}
.description_p {
margin: 7px 0px;
font-size: 12px;
}
.span_precio_actual{
color: var(--box-shadow-golden);
font-weight: bold;
display: block;
}
.span_precio_antes{
display: block;
color: rgb(160, 159, 159);
font-size: 12px;
position: relative;
}
.span_precio_antes::after{
position: absolute;
content: '';
width: 50px;
height: 1px;
background-color: rgb(194, 191, 191);
transform: rotate(5deg) translate(-45px,13px);
}
.div_description button {
padding: 8px;
border: none;
background: var(--box-shadow-golden);
border-radius: 5px;
margin: 3px 0px;
cursor: pointer;
transition: .3s;
}
.div_description button:hover {
cursor: pointer;
scale: 1.04;
}
/* DINAMIC PRODUCT */
.dinamic_product_figure {
width: 100%;
max-width: 300px;
}
.dinamic_product_figure.oferta{
position: relative;
overflow: hidden;
}
.img_cambiante {
width: 100%;
aspect-ratio: 1;
object-fit: cover;
border-radius: 10px;
}
.oferta::after{
content:'Antes: ' attr(data-oldprice);
position: absolute;
top: 0;
right: 0;
background-color: red;
width: 100%;
height: 40px;
font-weight: bold;
color: white;
transform: rotate(30deg) translate(60px);
display: flex;
justify-content: center;
align-items: center;
}
#dinamic_product_section {
width: 100%;
min-width: 400px;
}
#dinamic_container_product1 {
width: 100%;
display: flex;
gap: 20px;
}
#dinamic_container_product1.diferent_style {
display: inline;
text-align: center;
font-size: 40px;
font-weight: bold;
color: rgb(249, 148, 7);
}
.small_imgs {
display: flex;
justify-content: space-around;
gap: 6px;
}
.caja_peq_flor {
width: 50px;
transition: .3s;
cursor: pointer;
border-radius: 4px;
aspect-ratio: 1;
object-fit: cover;
}
.caja_peq_flor:hover {
scale: 1.1;
}
.caja_producto_dinamico {
width: 50%;
max-width: 220px;
margin: auto;
box-shadow: inset 0px 0px 8px 7px var(--box-shadow-golden);
border-radius: 7px;
position: relative;
transition: .3s;
}
.caja_producto_dinamico h5 {
font-size: 14px;
}
.caja_producto_dinamico label {
display: block;
border-radius: 3px;
padding: 4px 2px;
width: 100%;
height: 100%;
cursor: pointer;
}
.caja_color {
width: 40%;
min-width: 70px;
max-width: 100px;
padding: 4px;
border-radius: 5px;
box-shadow: 0px 0px 1px 1px rgb(193, 192, 192);
cursor: pointer;
transition: .3s;
position: relative;
}
.caja_color:hover {
scale: 1.1;
}
.caja_producto_dinamico input {
opacity: 0;
position: absolute;
}
.caja_producto_dinamico:hover {
box-shadow: inset 0px 0px 25px 26px var(--box-shadow-golden);
}
.p_description_product {
margin: 4px 0px;
font-size: 12px;
}
.cantidad_flores textarea {
resize: none;
padding: 6px;
width: 90%;
max-width: 400px;
border: 1px solid var(--box-shadow-golden);
outline: none;
border-radius: 6px;
}
.price {
color: rgb(146, 86, 8);
font-weight: bold;
font-size: 16px;
margin-top: 8px;
}
.main_container_color {
margin-top: 15px;
display: flex;
flex-direction: column;
gap: 15px;
}
.btn_crear_ramo {
width: 80%;
max-width: 200px;
margin: auto;
color: black;
padding: 10px 0px;
border-radius: 6px;
background: var(--box-shadow-golden);
box-shadow: 0px 0px 3px 3px var(--box-shadow-golden);
}
.input_producto_precio:not(:checked)~label {
opacity: 0.7;
}
.input_producto_precio:checked~label {
background-color: var(--box-shadow-golden);
}
.container_color {
margin-top: 10px;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 10px;
}
.input_color {
border: 1px solid rgb(158, 158, 154);
font-size: 12px;
padding: 7px;
border-radius: 5px;
}
.color_input {
opacity: 0;
position: absolute;
cursor: pointer;
}
.input_cantidad {
padding: 4px;
text-align: center;
}
.btn_anadir_carrito {
padding: 12px;
width: 100%;
max-width: 300px;
margin: auto;
background: var(--box-shadow-golden);
box-shadow: 0px 0px 3px 3px var(--box-shadow-golden);
border: none;
border-radius: 7px;
outline: none;
cursor: pointer;
transition: .3s;
text-transform: uppercase;
font-weight: bold;
}
.btn_anadir_carrito:hover {
scale: 1.1;
}
#mensaje_anadido {
font-size: 12px;
width: 250px;
margin: auto;
color: green;
background-color: rgb(208, 251, 208);
opacity: 0;
transition: .5s;
padding: 6px;
}
.check {
color: green;
font-size: 18px;
}
/* MEDIA QUERIES */
@media (max-width:600px) {
#div_container {
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 15px;
}
#dinamic_title {
font-size: 25px;
}
#dinamic_product_section {
min-width: none;
}
#dinamic_product_section h3 {
font-size: 15px;
}
}
/* CARRITO */
@import url(../CSS/estilos.css);
.li_nav button {
background-color: transparent;
outline: none;
border: none;
}
#my_popover {
background: var(--darkPink-color);
max-height: 100vh;
overflow-y: auto;
width: 100%;
max-width: 600px;
margin: auto;
border: none;
text-align: center;
position: relative;
}
#my_popover::backdrop {
backdrop-filter: blur(6px);
}
.li_nav:nth-of-type(4) {
position: relative;
}
#mensaje_no_hay_articulos {
text-align: center;
padding: 40px 0px;
}
#my_popover .h3_cesta {
position: sticky;
top: 0;
padding: 20px 0px;
background: var(--box-shadow-golden);
text-transform: uppercase;
font-size: 20px;
color: white;
}
.caja_articulo {
width: 100%;
font-size: calc(100% - 2px);
border: 1px solid rgba(128, 128, 128, 0.342);
padding: 5px;
display: flex;
justify-content: center;
justify-content: space-between;
}
.footer_cesta {
background: var(--box-shadow-golden);
padding: 10px 6px;
}
.footer_cesta p {
text-align: left;
text-transform: uppercase;
font-weight: bold;
margin-left: 6px;
}
.total_cesta {
font-size: 17px;
margin-left: 12px;
}
#pagar {
width: 60%;
padding: 10px 7px;
margin-top: 10px;
font-size: 15px;
font-weight: bold;
color: black;
background: antiquewhite;
box-shadow: inset 0px 0px 5px 5px rgb(153, 138, 119);
border: none;
border-radius: 5px;
cursor: pointer;
transition: .3s;
}
#pagar:hover {
box-shadow: inset 0px 0px 11px 11px rgb(153, 138, 119);
}
.caja_articulo .caja_description {
width: 30%;
max-width: 130px;
}
.caja_articulo .caja_description img {
width: 100%;
object-fit: cover;
aspect-ratio: 1;
height: 100px;
border-radius: 10px;
}
.caja_articulo .caja_cantidad {
width: 30%;
max-width: 150px;
display: flex;
justify-content: center;
justify-content: space-between;
align-items: center;
}
.caja_articulo .caja_cantidad input {
width: 60%;
}
.caja_precio_total {
width: 30%;
display: flex;
justify-content: space-between;
}
.caja_precio_total div:nth-child(3) {
display: grid;
place-content: center;
}
/* PAGO */
:root {
--darkPink-color: rgba(241, 76, 186, 0.514);
--mediumPink-color: rgba(236, 141, 228, 0.514);
--lightPink-color: rgba(243, 187, 236, 0.322);
--golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
--box-shadow-golden: #BF953F;
--purple-color: rgb(243, 98, 243);
--black-color: rgb(10, 10, 10);
}
* {
margin: 0;
padding: 0;
text-decoration: none;
box-sizing: border-box;
font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
color: var(--extraDarkBrown-color);
}
input {
outline: none;
border: 1px solid grey;
}
#div_container {
width: 100%;
max-width: 1200px;
background-color: var(--golden-color);
margin: auto;
}
header {
width: 100%;
color: white;
background: linear-gradient(80deg,var(--black-color)28%, var(--purple-color), transparent);
}
.caja_header {
display: flex;
padding: 30px 0px 30px 40px;
}
.caja_header h1 {
font-size: 2.5em;
}
.font_title {
font-family: "Great Vibes", serif;
font-size: 28px;
font-weight: 500;
}
.caja_header div {
margin-left: 15px;
}
.caja_header figure {
width: 10%;
max-width: 70px;
display: grid;
place-content: center;
}
.caja_header figure img {
width: 100%;
object-fit: cover;
aspect-ratio: 1;
}
main {
width: 100%;
height: calc(100% - 91px);
display: flex;
}
aside {
width: 20%;
color: white;
background:linear-gradient(180deg,var(--black-color)15%,var(--purple-color),transparent);
}
#div_list_aside {
list-style: none;
}
#div_list_aside li {
padding: 20px 0px 20px 10px;
font-weight: bold;
font-size: 16px;
display: flex;
align-items: center;
}
.active {
background-color: rgba(153, 152, 152, 0.315);
}
article {
width: 80%;
padding: 20px 0px 0px 0px;
}
article h2 {
font-size: 30px;
}
article:first-child {
font-size: 13px;
margin-left: 40px;
margin-bottom: 7px;
}
#section_resumen {
width: 100%;
padding: 0px 20px;
}
#section_datos_envio,
#section_datos_tarjeta,
#section_recibo {
display: none;
}
/*SECCIÓN RESUMEN */
.alinear {
display: flex;
gap: 15px;
margin-top: 20px;
}
.padre_resumen_dinamico {
box-shadow: 0px 0px 2px 2px rgb(129, 129, 128);
border: 1px dashed rgb(129, 129, 128);
width: 100%;
max-width: 700px;
}
#div_section_resumen {
margin-bottom: 8px;
}
.caja_producto {
width: 95%;
margin: auto;
padding: 7px;
display: flex;
justify-content: space-around;
gap: 16px;
font-size: 13px;
text-align: center;
border-bottom: 1px dashed rgb(129, 129, 128);
}
.caja_producto figure {
width: 40%;
text-align: left;
max-width: 200px;
}
.caja_producto figure * {
text-align: center;
}
.caja_producto figure img {
display: block;
margin: 8px auto;
width: 80%;
max-width: 150px;
border-radius: 20px;
box-shadow: 0px 3px 4px 0px grey;
}
.caja_producto h4 {
font-size: 14px;
margin-bottom: 10px;
}
.caja_producto div:nth-of-type(1) {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.p_cantidad_flores {
font-size: 30px;
font-weight: bold;
text-align: center;
}
.nota {
font-size: 10px;
margin-bottom: 50px;
}
.div_delete {
width: 20px;
height: 20px;
margin: auto 10px;
}
.div_delete i {
font-size: 18px;
cursor: pointer;
}
.caja_producto div:nth-of-type(2) {
text-align: center;
}
.resumen_footer {
padding: 4px;
}
.resumen_footer p {
font-size: 12px;
padding: 4px 0px;
font-weight: 600;
}
.resumen_footer p>span {
float: right;
font-size: 14px;
font-weight: bold;
}
#pagar_resumen {
display: block;
width: 70%;
max-width: 300px;
margin: 15px auto;
outline: none;
border: none;
padding: 10px 20px;
box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
background-color:rgb(170, 170, 170);
border-radius: 7px;
cursor: pointer;
text-transform: uppercase;
font-weight: bold;
font-size: 14px;
}
#contenedor_nota_regalo {
width: 200px;
height: 200px;
margin: 20px auto;
display: none;
position: relative;
}
.nota {
font-size: 10px;
margin-bottom: 50px;
}
#cerrar_mensaje {
position: absolute;
right: 0;
top: -30px;
width: 30px;
height: 30px;
cursor: pointer;
display: grid;
place-content: center;
border-radius: 5px;
background-color: var(--lightBrown-color);
box-shadow: inset 0px 0px 3px 3px var(--darkBrown-color);
}
#textarea_mensaje_regalo {
width: 100%;
resize: none;
border: none;
outline: none;
padding: 6px;
box-shadow: 0px 0px 2px 2px grey;
border-radius: 4px;
}
.indicaciones_mensaje {
font-size: 10px;
font-weight: bold;
margin: 6px 0px 10px 0px;
}
#btn_guardar_mensaje {
display: block;
margin: 10px auto;
padding: 5px 20px;
border: none;
border-radius: 6px;
outline: none;
cursor: pointer;
background-color: var(--lightBrown-color);
box-shadow: inset 0px 0px 3px 3px var(--darkBrown-color);
}
.mail {
color: rgb(33, 131, 33);
font-size: 30px;
}
.editar_ms,
.borrar_ms {
cursor: pointer;
font-size: 12px;
margin: 3px 0px;
}
.editar_ms:hover {
color: rgb(155, 97, 10);
}
.borrar_ms:hover {
color: red;
}
/* SECCIÓN DATOS ENVÍO */
#section_datos_envio {
padding: 0px 10px;
}
#div_section_datos_envio {
width: 90%;
max-width: 400px;
margin-left: 40px;
}
#form_datos_envio>div {
display: flex;
flex-direction: column;
margin: 20px 0px;
}
.ms_error {
display: none;
}
.ms_error p {
color: red;
font-size: 12px;
}
#div_section_datos_envio div:nth-child(2) input {
width: 100%;
}
#div_section_datos_envio input,
select {
border-radius: 4px;
/* border: none; */
outline: none;
padding: 6px 3px;
width: 60%;
}
#div_section_datos_envio input:focus,
select:focus {
border: none;
box-shadow: 0px 0px 3px 1px rgb(87, 124, 179);
}
#div_section_datos_envio textarea {
border-radius: 4px;
outline: none;
resize: none;
padding: 6px;
}
#div_section_datos_envio label,
.p_observaciones {
margin-left: 6px;
}
.contenedor_codig_y_num {
width: 100%;
display: flex;
}
#desplegable_codigo_pais {
background-color: white;
margin-right: 6px;
position: relative;
}
#ul_country_code {
background-color: white;
position: absolute;
width: 100%;
display: none;
}
#ul_country_code .option:hover {
background-color: rgb(212, 192, 166);
}
#desplegable_codigo_pais .option {
width: 100%;
height: 30px;
display: flex;
gap: 4px;
justify-content: center;
align-items: center;
cursor: pointer;
}
.placeholder_fake {
opacity: 0.3;
}
.placeholder_fake:hover {
opacity: 1;
}
.girar {
font-size: 12px;
margin-left: 15px;
transform: rotate(30deg);
}
#desplegable_codigo_pais .option img {
width: 20px;
object-fit: contain;
}
#guardar_direcc {
display: block;
width: 80%;
max-width: 200px;
margin: 20px auto;
padding: 15px 0px;
text-align: center;
border-radius: 10px;
font-weight: bold;
text-transform: uppercase;
box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
background-color:rgb(170, 170, 170);
}
/* SECCIÓN TARJETA SECCIÓN TARJETA */
#section_datos_tarjeta {
width: 100%;
}
.div_icono_tarjetas {
display: flex;
gap: 7px;
margin-left: 30px;
}
.div_icono_tarjetas input {
display: none;
}
.div_icono_tarjetas label {
font-size: 12px;
margin-left: 3px;
}
.div_icono_tarjetas div {
width: 50px;
}
.div_icono_tarjetas img:hover {
box-shadow: 0px 0px 1px 1px rgb(87, 124, 179);
cursor: pointer;
}
.div_icono_tarjetas div img {
width: 100%;
object-fit: cover;
aspect-ratio: 1.5;
background-color: rgba(252, 250, 250, 0.329);
}
.div_inputs_info {
width: 100%;
display: flex;
gap: 3px;
justify-content: space-between;
}
.div_inputs_info input {
display: block;
border-radius: 4px;
padding: 6px 2px;
width: 90%;
}
.div_inputs_info input:focus {
border: none;
box-shadow: 0px 0px 1px 1px rgb(87, 124, 179);
}
#input_expiracion {
width: 40%;
}
#input_c_seguridad {
width: 40%;
max-width: 50px;
}
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.div_derecho{
width: 100%;
display: grid;
place-items: center;
}
.div_derecho img {
width: 100%;
min-width: 100px;
max-width: 250px;
}
.cuadrototal p:first-child{
font-weight: bold;
}
#mostrar_total_pago2{
font-size: 30px ;
font-weight: bold;
}
.div_izquierdo {
padding: 15px;
width: 100%;
max-width: 500px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.div_izquierdo div {
margin-bottom: 10px;
}
#btn_pagar_banco {
display: block;
width: 80%;
max-width: 200px;
margin: 20px auto;
padding: 15px 0px;
text-align: center;
border-radius: 10px;
font-weight: bold;
text-transform: uppercase;
box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
background-color:rgb(170, 170, 170);
}
#loading{
height: 100vh;
width: 100%;
display: grid;
place-items: center;
backdrop-filter: blur(5px);
display: none;
}
.centrar{
width: 90%;
height: 40%;
text-align: center;
}
.caja_punticos{
display: flex;
justify-content: center;
gap:9px;
margin: 15px 0px;
}
.punticos{
width: 40px;
height: 40px;
border-radius: 50%;
opacity: 0.2;
}
.animacion_activa{
animation: transicion 5s ease infinite ;
}
.centrar:first-child{
font-weight: bold;
font-size: 25px;
}
.centrar p:nth-child(3){
font-size: 13px;
text-align: center;
}
.punticos:nth-child(1){
animation-delay: 0s;
}
.punticos:nth-child(2){
animation-delay: 1s ;
}
.punticos:nth-child(3){
animation-delay: 2s ;
}
.punticos:nth-child(4){
animation-delay: 3s ;
}
.punticos:nth-child(5){
animation-delay: 4s ;
}
@keyframes transicion {
0% {
opacity: 1;
}
20%{
opacity: 0.2;
}
}
/* SECCION RECIBO SECCION RECIBO */
#div_section_recibo{
width: 90%;
max-width: 700px;
margin:0px auto 40px;
border: dashed 1px grey;
box-shadow: 0px 0px 2px 2px rgb(189, 188, 188);
}
.centrar_recibo{
display: flex;
flex-direction: column;
gap: 20px;
padding: 10px;
}
.info_entrega_envio{
margin-bottom: 8px;
}
.d_envio{
display: flex;
flex-direction: column;
gap: 8px;
}
#div_section_recibo h2{
text-align: center;
background: linear-gradient(45deg, var(--darkBrown-color),var(--lightBrown-color),transparent);
}
#plazo_entrega{
font-weight: bold;
}
.bold{
font-weight: bold;
}
/* MEDIA QUERIES */
@media (max-width: 980px) {
.alinear {
display: grid;
}
#contenedor_nota_regalo {
width: 70%;
max-width: 500px;
grid-column: 1/2;
grid-row: 1/2;
}
}
/* CRÉALO TU MISMO */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
}
body {
height: 100%;
background: linear-gradient(rgba(0, 0, 0, 0.460), rgba(0, 0, 0, 0.460)), url(../IMG/background\ crealo\ tu\ mismo.avif);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
color: white;
}
.centrar {
width: 100%;
max-width: 1200px;
margin: auto;
}
h1 {
text-align: center;
width: 100%;
padding: 40px 0;
font-size: 3em;
}
form {
width: 100%;
}
h3 {
text-align: center;
margin-bottom: 30px;
}
.opciones {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
justify-content: space-between;
}
.opciones input {
display: none;
}
.caja {
max-width: 200px;
height: 60px;
background: white;
border-radius: 7px;
transition: .3s;
}
.caja label {
width: 100%;
height: 100%;
border-radius: 7px;
display: flex;
align-items: center;
gap: 20px;
cursor: pointer;
}
.opciones label:hover {
background-color: rgb(228, 218, 175);
}
.opciones label p {
color: black;
font-weight: bold;
}
.opciones label img {
width: 30%;
aspect-ratio: 1;
object-fit: cover;
border-radius: 10px;
}
.opciones input:checked~label {
background-color: rgb(228, 218, 175);
}
hr {
margin: 20px 0;
}
#titulo_opcion {
text-align: center;
padding: 20px 0;
font-size: 3em;
}
#opciones_seleccion {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 10px;
}
#opciones_seleccion div {
max-width: 200px;
margin: auto;
padding: 10px;
text-align: center;
background-color: rgba(0, 0, 0, 0.534);
cursor: pointer;
border-radius: 10px;
}
#opciones_seleccion div img {
width: 100%;
border-radius: 10px;
object-fit: cover;
aspect-ratio: 1;
}
#opciones_seleccion div p {
padding: 10px 0;
font-size: 17px;
}
#contenedor_dinamico {
background: rgba(0, 0, 0, 0.61);
margin-top: 30px;
}
#h3 {
padding-top: 20px;
font-size: 2em;
}
#mostrar {
display: grid;
padding: 10px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
#mostrar img {
width: 100%;
margin: auto;
max-width: 300px;
aspect-ratio: 1;
object-fit: cover;
border-radius: 7px;
}
.aside_tamano {
max-width: 400px;
margin: auto;
display: flex;
flex-direction: column;
gap: 20px;
}
.aside_tamano h4 {
margin-bottom: 10px;
font-size: 20px;
text-align: center;
}
.aside_tamano button {
width: 100%;
max-width: 300px;
margin: auto;
padding: 10px 0px;
border: none;
background-color: rgb(244, 238, 238);
border-radius: 7px;
font-size: 20px;
cursor: pointer;
}
#div_tamano {
display: flex;
gap: 20px;
}
.div2 {
max-width: 250px;
text-align: center;
background-color: rgba(107, 101, 101, 0.507);
border-radius: 7px;
padding: 3px;
cursor: pointer;
}
.div2:hover {
background-color: rgba(250, 235, 215, 0.411);
}
.div2 img {
width: 100%;
object-fit: cover;
aspect-ratio: 1;
}
.div2 span {
font-size: 18px;
color: rgb(239, 127, 8);
}
.div2 :first-child {
font-weight: bold;
font-size: 17px;
margin-bottom: 6px;
}
.div2 p:nth-of-type(2) {
font-size: 12px;
}
#opciones_seleccion div:nth-of-type(1) {
background-color: rgb(228, 218, 175);
color: black;
}
#mensaje {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));
gap: 6px;
}
.div_mensaje {
width: 90px;
padding: 6px;
cursor: pointer;
text-align: center;
border-radius: 3px;
}
.div_mensaje:hover {
background-color: rgba(250, 235, 215, 0.411);
}
/* PÁGINA PRINCIPAL */
//CARRUSEL moviendo los li en lugar del ul; ya que tiene over-flow: hidden
const getId = function (id) {
return document.getElementById(id)
}
const ulCarrouselNodeList = document.querySelectorAll('#ul_carousel li')
const rightArrow = getId('right_arrow_carr')
const leftArrow = getId('left_arrow_carr')
let index = 0
let position = 0
let percentage = 0
let gap = 0
rightArrow.addEventListener('click', () => {
if (index == ulCarrouselNodeList.length - 1) {
rightArrow.style.color = 'rgb(199, 197, 197)'
return
}
rightArrow.style.color = '#000000'
leftArrow.style.color = '#000000'
index += 1
position -= 100
gap -= 50
ulCarrouselNodeList[index - 1].style.transform = `translateX(calc(${position}% + ${gap}px))`
ulCarrouselNodeList[index].style.transform = `translateX(calc(${position}% + ${gap}px))`
})
leftArrow.addEventListener('click', () => {
if (index == 0) {
leftArrow.style.color = 'rgb(199, 197, 197)'
return
}
leftArrow.style.color = '#000000'
rightArrow.style.color = '#000000'
index -= 1
position += 100
gap += 50
ulCarrouselNodeList[index + 1].style.transform = `translateX(calc(${position}% + ${gap}px))`
ulCarrouselNodeList[index].style.transform = `translateX(calc(${position}% + ${gap}px))`
})
//FLORES
const divContainer = getId('div_container')
const dinamicTitle = getId('dinamic_title')
const btnFlores = getId('btn_flores')
const description = getId('description')
const countDown = document.getElementById('countdown')
let carrito = []
/* const divContainer = document.getElementById('div_container') */
const h1Dinamic = document.getElementById('dinamic_title')
const dropDownBox = document.getElementById('dropDown_box')
const menuIcon = document.getElementById('menu_icon')
const closeIcon = document.getElementById('close_icon')
const divMenu = document.getElementById('div_menu')
const dinamicSection = document.getElementById('dinamic_section')
const body = document.getElementById('body')
/* btns */
const btnEventos = document.getElementById('btn_eventos')
/* función de renderizado de los productos de las opciones del ul del main */
const renderizadoLiMain = (e, array, nombBtn) => {
divContainer.innerHTML = ''
if (e == 'Flores') {
h1Dinamic.textContent = 'Flores'
} else {
h1Dinamic.textContent = e.target.textContent
}
array.forEach((objectChild) => {
description.textContent = objectChild.text
const caja = document.createElement('div')
caja.className = 'caja-flor'
caja.id = `caja_${objectChild.id}`
caja.innerHTML = `
${objectChild.name}
${objectChild.description}
${objectChild.precioAntes ? `${objectChild.precioAntes}` : ''}
${ objectChild.precio? objectChild.precio.toFixed(2) : ''}
`
divContainer.append(caja)
})
}
//para que salgan las flores por defecto
renderizadoLiMain('Flores', arrayFlores, 'btn_flores')
/* para renderizar los colores de flores disponibles */
const cambioContenidoFlorColor = (arrayColor, contenedorSmallImgs, contenedorColores, imgCambiante) => {
let contador = 0
arrayColor.forEach((color) => {
/* para color */
const caja = document.createElement('div')
caja.className = 'caja_color'
caja.setAttribute('data-img', color.img);
caja.style.background = `${color.rgb}`
caja.innerHTML = `
`
contenedorColores.append(caja)
/* para img flor */
const cajaFlor = document.createElement('img')
cajaFlor.className = 'caja_peq_flor'
cajaFlor.src = `${color.img}`
cajaFlor.alt = 'flores'
cajaFlor.title = `${color.name}`
contenedorSmallImgs.append(cajaFlor)
caja.addEventListener('click', () => {
imgCambiante.src = `${caja.dataset.img}`
})
cajaFlor.addEventListener('click', () => {
imgCambiante.src = `${caja.dataset.img}`
const inputColorSeleccionado = document.querySelector(`input[data-img='${caja.dataset.img}']`)
inputColorSeleccionado.checked = true
})
})
}
/* para cambiar palabra según el btn del menú seleccionado */
const decideContenido = (beforeh1Dinamic, array, contenedorSmallImgs, contenedorColores, imgCambiante, tituloProducto, cantidadFlores, inputCantidad,colorh3) => {
const mainContainerColorh3 = document.querySelector('.main_container_color h3')
switch (beforeh1Dinamic.trim()) {
case 'Eventos':
cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante)
tituloProducto.innerText = 'Escoge el tipo de arreglo:'
break;
case 'Cestas':
cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante)
tituloProducto.innerText = 'Escoge el tamaño de tu cesta:'
break;
case 'Flores':
cantidadFlores.innerText = 'Cantidad de flores'
inputCantidad.style.display = 'inline';
tituloProducto.innerText = 'Precio de la flor:'
cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante)
break;
case 'Ramos':
cantidadFlores.innerText = 'Cantidad de ramos que necesitas'
mainContainerColorh3.innerText = ''
tituloProducto.innerText = 'Precio de tu ramo:'
break;
case 'Regalos':
cantidadFlores.innerText = 'Cantidad de regalos que necesitas'
mainContainerColorh3.innerText = ''
tituloProducto.innerText = 'Precio del regalo:'
break;
case 'Ofertas':
tituloProducto.innerText = 'Precio del producto en oferta:'
cantidadFlores.innerText = 'Cantidad que necesitas:'
colorh3.innerText = ''
break;
default:
break;
}
}
const verificarProductoExistenteYrenderizado = (objetoCesta,mensajeAnadido,inputCantidad)=>{
let index = carrito.findIndex(obj => obj.id === objetoCesta.id)
if (index !== -1) {
// Si existe, solo incrementamos la cantidad
carrito[index].cantidad += Number(inputCantidad.value);
carrito[index].total = carrito[index].cantidad * carrito[index].price
} else {
objetoCesta.total = objetoCesta.cantidad * objetoCesta.price
carrito.push(objetoCesta);
}
setTimeout(() => {
mensajeAnadido.style.opacity = 1
setTimeout(() => {
mensajeAnadido.style.opacity = 0
}, 3000)
}, 300)
totalCantidadEnCesta(carrito)
renderizarEnCarrito(carrito)
totalCarrito()
}
/* función renderizado de los productos de cada caja del renderizado de arriba */
const renderizadoProducto = (array, target) => {
array.forEach((objeto) => {
divContainer.innerHTML = ''
let beforeh1Dinamic = h1Dinamic.textContent
h1Dinamic.textContent = `${objeto.name}`
description.textContent = ''
divContainer.innerHTML = `
`
/* Contenido según el btn seleccionado */
const contenedorSmallImgs = document.querySelector('.small_imgs')
const contenedorColores = document.querySelector('.container_color');
const imgCambiante = document.querySelector('.img_cambiante');
const tituloProducto = document.querySelector('.titulo_producto');
const cantidadFlores = document.querySelector('.cantidad_floresh5');
const divCantidadFlores = document.querySelector('.cantidad_flores')
const inputCantidad = document.getElementById('input-cantidad');
const colorh3 = document.querySelector('.color_h3')
decideContenido(beforeh1Dinamic, objeto.colores, contenedorSmallImgs, contenedorColores, imgCambiante, tituloProducto, cantidadFlores, inputCantidad,colorh3);
/* compruebo si estoy en CESTAS */
const dinamicContainerProduct1 = document.getElementById('dinamic_container_product1')
if (!objeto.precios) {
dinamicContainerProduct1.textContent = objeto.precio.toFixed(2) + '€'
dinamicContainerProduct1.classList.add('diferent_style')
} else {
dinamicContainerProduct1.classList.remove('diferent_style')
objeto.precios.forEach((item) => {
const cajaProducto = document.createElement('div')
cajaProducto.className = 'caja_producto_dinamico'
cajaProducto.innerHTML = `
`
dinamicContainerProduct1.append(cajaProducto)
})
}
/* compruebo si estoy en EVENTOS */
if (objeto.name === 'Cumpleaños' || objeto.name === 'Bodas') {
inputCantidad.remove()
divCantidadFlores.innerHTML = ''
divCantidadFlores.innerHTML = `
Escríbenos datos sobre tu decoración
`
}
/* compruebo si estoy en OFERTAS */
if(beforeh1Dinamic === 'Ofertas'){
const figureImgCambiante = document.querySelector('.dinamic_product_figure')
figureImgCambiante.setAttribute('data-oldprice', objeto.precioAntes)
figureImgCambiante.classList.add('oferta')
}
/* BOTÓN AÑADIR AL CARRITO */
const formDinamicProductSection = document.getElementById('dinamic_product_section')
const mensajeAnadido = document.getElementById('mensaje_anadido')
/* const inputCantidad = formDinamicProductSection.querySelector('.input_cantidad') */
formDinamicProductSection.addEventListener('submit', function (e) {
e.preventDefault()
let objetoCesta = {}
const inputColorSeleccionado = document.querySelector('input[name="input_color"]:checked');
/* para ramos y regalo */
if (objeto.name.includes('Ramo') || objeto.name.includes('regalo') || beforeh1Dinamic === 'Ofertas' && inputCantidad.value !== '0') {
objetoCesta.flowerColor = 'de la foto',
objetoCesta.id = objeto.id,
objetoCesta.img = objeto.img,
objetoCesta.name = objeto.name,
objetoCesta.price = objeto.precio,
objetoCesta.cantidad = Number(inputCantidad.value)
verificarProductoExistenteYrenderizado(objetoCesta,mensajeAnadido,inputCantidad)
}
if (inputCantidad && inputCantidad.value !== '0' && inputColorSeleccionado) {
objetoCesta.flowerColor = inputColorSeleccionado.id,
objetoCesta.id = objeto.id + inputColorSeleccionado.dataset.id,
objetoCesta.img = inputColorSeleccionado.dataset.img,
objetoCesta.name = objeto.name,
objetoCesta.price = objeto.precio,
objetoCesta.cantidad = Number(inputCantidad.value)
/* para cestas */
let inputTamanoCestaSeleccionado = document.querySelector('input[name="input_cesta"]:checked');
if (objeto.precios && inputTamanoCestaSeleccionado) {
objetoCesta.tamanoCesta = inputTamanoCestaSeleccionado.dataset.tamano
objetoCesta.price = Number(inputTamanoCestaSeleccionado.dataset.price)
}
verificarProductoExistenteYrenderizado(objetoCesta,mensajeAnadido,inputCantidad)
}
})
if (objeto.tipos) {
const found = renderizadoProducto(objeto.tipos, target)
if (found) {
return found
}
}
})
}
/* Delegación de eventos con id */
body.addEventListener('click', (e) => {
const target = e.target
let nombreBtn = target.id
switch (nombreBtn) {
case 'btn_eventos':
countDown.style.display = 'none'
renderizadoLiMain(e, arrayDeEventos, nombreBtn)
break;
case 'btn_cestas':
countDown.style.display = 'none'
renderizadoLiMain(e, arrayCestaFlores, nombreBtn)
break;
case 'btn_ramos':
countDown.style.display = 'none'
renderizadoLiMain(e, arrayRamos, nombreBtn)
break;
case 'btn_flores':
countDown.style.display = 'none'
renderizadoLiMain(e, arrayFlores, nombreBtn)
break;
case 'btn_regalos':
countDown.style.display = 'none'
renderizadoLiMain(e, arrayRegalos, nombreBtn)
break;
case 'ofertas':
countDown.style.display = 'block'
renderizadoLiMain(e, arrayOfertas, nombreBtn)
break;
default:
break;
}
})
/* delegación de eventos con clase */
dinamicSection.addEventListener('click', (e) => {
const target = e.target
switch (target.className) {
case 'btn_ver_productos'://creado de manera general para todos los botones, que busquen su correspondiente array y objeto
const nombArticulo = target.dataset.name
const array = JSON.parse(target.dataset.array)
const objeto = array.filter((item) => item.name == nombArticulo)
renderizadoProducto(objeto)
break;
default:
break;
}
})
menuIcon.addEventListener('click', () => {
menuIcon.style.display = 'none'
menuIcon.style.background = 'background-color: var(--darkBrown-color);'
dropDownBox.style.display = 'block'
closeIcon.style.display = 'block'
divMenu.classList.toggle('decoration')
})
closeIcon.addEventListener('click', () => {
menuIcon.style.display = 'block'
dropDownBox.style.display = 'none'
closeIcon.style.display = 'none'
divMenu.classList.toggle('decoration')
})
/* IMITACIÓN DE BASE DE DATOS (PRODUCTOS) */
/* objeto para contenido dinámico */
const arrayDeEventos = [
{
id: 11,
name: 'Cumpleaños',
img: '../IMG/evento cumpleños.jpg',
description: 'Realizamos hermosas decoraciones en los cumpleaños',
precios: [
{
id: 111,
name: 'Arreglos sencillos',
description: 'El precio es por cada pack de 10 flores usados sin importar el tipo',
precio: 150,
},
{
id: 112,
name: 'Arreglos complejos',
description: 'El precio es cuando son más de 200 flores sin importar el tipo',
precio: 400
}
], colores: [
{
name: 'Blancas',
rgb: 'rgb(252, 251, 251)',
img: '../IMG/decoracion cumpleaños blanco.webp'
},
{
name: 'Rosado',
rgb: 'rgb(248, 153, 212)',
img: '../IMG/arreglo cumpleaño rosado.webp'
},
]
},
{
id: 12,
name: 'Bodas',
img: '../IMG/boda.jpg',
description: 'Decora tu boda con nosotros',
precios: [
{
id: 112,
name: 'Arreglos sencillos',
description: 'El precio es para un máximo de 150 flores sin importar el tipo incluyendo 20 globos',
precio:150 ,
},
{
id: 113,
name: 'Arreglos complejos',
description: 'El precio es para un mínimo de 150 flores y máximo 400 flores sin importar el tipo, incluye 60 globos',
precio: 400,
}
],
colores: [
{
name: 'Blancas',
rgb: 'rgb(252, 251, 251)',
img: '../IMG/decoracion boda blanca.webp'
},
{
name: 'Combinado',
rgb: 'rgba(236, 154, 240, 1)',
img: '../IMG/decoracion boda combinado.webp'
},
]
}
]
const arrayCestaFlores = [
{
id: 21,
name: 'Cesta de Amapolas',
category: 'Amapolas',
img: '../IMG/cesta amapola.jpg',
description: 'Es la popular amapola de delicadas flores rojas que solemos ver y admirar en los campos de maíz .',
precios: [
{
id: 211,
name: 'Cesta pequeña',
img: '../IMG/cesta amapola.jpg',
description: 'Cesta pequeña de 10 Amapolas',
precio: 15
},
{
id: 212,
name: 'Cesta grande',
img: '../IMG/cesta amapola.jpg',
description: 'Para un rango de Amapolas de 28 flores',
precio: 30
}
],
colores: [
{
name: 'Rojas',
rgb: 'rgb(255, 0, 0)',
img: '../IMG/cesta amapola.jpg',
},
{
name: 'Blancas',
rgb: 'rgb(252, 251, 251)',
img: '../IMG/cesta amapola blanca.webp'
},
{
name: 'Naranja',
rgb: 'rgb(249, 171, 45)',
img: '../IMG/cesta amapola naranja.webp'
},
{
name: 'Rosada',
rgb: 'rgb(247, 189, 235)',
img: '../IMG/cesta amapola rosada.webp'
},
]
},
{
id: 22,
name: 'Cesta de Lirios',
category: 'Lirios',
img: '../IMG/cesta lirios.webp',
description: 'Un verdadero placer rendir homenaje a los versátiles iris o lirios barbados que iluminan. ',
precios: [
{
id: 221,
name: 'Cesta pequeña',
img: '../IMG/cesta amapola.jpg',
description: 'Cesta pequeña de 10 Lirios',
precio: 15
},
{
id: 222,
name: 'Cesta grande',
img: '../IMG/cesta amapola.jpg',
description: 'Para un rango de Lirios 28 flores',
precio: 30
}
],
colores: [
{
name: 'Azul',
rgb: 'rgb(101, 101, 252)',
img: '../IMG/cesta lirios azules.webp',
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/cesta lirio blanco.webp'
},
{
name: 'Rosa',
rgb: 'rgb(253, 132, 217)',
img: '../IMG/cesta lirios.webp',
}, {
name: 'Morado',
rgb: 'rgb(120, 55, 124)',
img: '../IMG/cesta lirios morados.webp'
}
]
},
{
id: 32,
name: 'Cesta de Rosas',
category: 'Rosas',
img: '../IMG/cesta de rosas.jpg',
description: 'La presencia de las rosas en la cultura popular es omnipresente, desde su aparición en películas y programas de televisión',
precios: [
{
id: 321,
name: 'Cesta pequeña',
img: '../IMG/cesta de rosas.jpg',
description: 'Cesta pequeña de 10 Rosas',
precio: 15
},
{
id: 322,
name: 'Cesta grande',
img: '../IMG/cesta de rosas.jpg',
description: 'Para un rango de Rosas de 28 flores',
precio: 30
}
],
colores: [
{
name: 'Rojas',
rgb: 'rgb(255, 0, 0)',
img: '../IMG/cesta rosa roja.webp',
},
{
name: 'Amarillas',
rgb: 'rgb(255, 242, 0)',
img: '../IMG/cesta rosa amarilla.webp',
},
{
name: 'Blancas',
rgb: 'rgb(252, 251, 251)',
img: '../IMG/cesta rosa blanca.webp'
},
{
name: 'Azul',
rgb: 'rgb(75, 131, 252)',
img: '../IMG/cesta rosa azul.webp'
},
{
name: 'Rosada',
rgb: 'rgb(247, 189, 235)',
img: '../IMG/cesta rosa rosada.webp'
},
]
},
{
id: 42,
name: 'Cesta de Gardenias',
category: 'Gardenias',
img: '../IMG/cesta gardenia.webp',
description: 'Durante el final de la primavera produce flores parecidas a las de las rosas.',
precios: [
{
id: 421,
name: 'Cesta pequeña',
img: '../IMG/cesta gardenia.webp',
description: 'Cesta pequeña de 10 Gardenias',
precio: 15
},
{
id: 422,
name: 'Cesta grande',
img: '../IMG/cesta gardenia.webp',
description: 'Para un rango de Gardenias de 28 flores',
precio: 30
}
],
colores: [
{
name: 'Blancas',
rgb: 'rgb(254, 252, 252)',
img: '../IMG/cesta gardenia.webp',
},
{
name: 'Rosadas',
rgb: 'rgb(248, 110, 149)',
img: '../IMG/cesta gardenia rosada.webp',
},
]
},
]
const arrayRamos = [
{
id: 'r1',
name: 'Ramo de flores silvestres',
precio: 15,
img: '../IMG/ramo de flor1.webp',
description: 'Ramo de flores ideal para una mujer sencilla y única'
},
{
id: 'r2',
name: 'Ramo Ada',
img: '../IMG/ramo de flor2.webp',
precio: 17,
description: 'Ramo de flores ideal para una mujer sencilla y única'
},
{
id: 'r3',
name: 'Ramo Celestial',
precio: 15.50,
img: '../IMG/ramo de flor3.webp',
description: 'Rmo de flores ideal para una mujer sencilla y única'
},
{
id: 'r4',
name: 'Ramo combinado',
img: '../IMG/ramo de flor4.webp',
precio: 18,
description: 'Ramo de flores ideal para una mujer sencilla y única'
},
{
id: 'r5',
name: 'Ramo Estephany',
precio: 20,
img: '../IMG/ramo de flor5.webp',
description: 'Rmo de flores ideal para una mujer sencilla y única'
},
{
id: 'r6',
name: 'Ramo Argentina',
img: '../IMG/ramo de flor6.webp',
precio: 18,
description: 'Ramo de flores ideal para una mujer sencilla y única'
},
{
id: 'r7',
name: 'Ramo Barbara',
precio: 20,
img: '../IMG/ramo de flor7.webp',
description: 'Rmo de flores ideal para una mujer sencilla y única'
},
{
id: 'r8',
name: 'Ramo Tu Luz',
precio: 20,
img: '../IMG/ramo de flor8.webp',
description: 'Rmo de flores ideal para una mujer sencilla y única'
},
{
id: 'r9',
name: 'Ramo Sheyla',
img: '../IMG/ramo de flor9.webp',
precio: 18,
description: 'Ramo de flores ideal para una mujer sencilla y única'
},
{
id: 'r10',
name: 'Ramo Caridad',
precio: 20,
img: '../IMG/ramo de flor10.webp',
description: 'Rmo de flores ideal para una mujer sencilla y única'
},
]
const arrayRegalos = [
{
id: 'rg1',
name: 'Set regalo Julia',
precio: 35,
img: '../IMG/regalo cesta+vino+bom.webp',
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg2',
name: 'Set regalo Dunia',
img: '../IMG/regalo cesta+bom.webp',
precio: 37,
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg3',
name: 'Set regalo Almiral',
precio: 58,
img: '../IMG/regalo cesta+fruta.webp',
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg4',
name: 'Set regalo Lucero',
img: '../IMG/regalo cesta+fruta2.webp',
precio: 48,
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg5',
name: 'Set regalo Dalula',
precio: 50,
img: '../IMG/regalo ramo+vino+oso.webp',
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg6',
name: 'Set regalo Oasis',
img: '../IMG/regalo cesta+vino+bom2.webp',
precio: 48,
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg7',
name: 'Set regalo Babyshower',
precio: 20,
img: '../IMG/regalo cesta+globo+pelu.webp',
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg8',
name: 'Set regalo de cumpleaños',
precio: 20,
img: '../IMG/regalo cesta+globo.webp',
description: 'Set de cesta de flores, botella de vino y bombones'
},
{
id: 'rg9',
name: 'Set regalo San Valentín',
img: '../IMG/regalo valentin.webp',
precio: 18,
description: 'Set de cesta de flores, botella de vino y bombones'
},
]
const arrayFlores = [
{
name: 'Girasol', id: 'f1', precio: 0.46, description: ' Representa la alegría y la lealtad, conocido por su color amarillo vibrante y su capacidad de seguir al sol.', img: '../IMG/girasol.jpg',
colores: [
{
name: 'Amarillo',
rgb: 'rgb(247, 191, 71)',
img: '../IMG/girasol.jpg'
}
]
},
{
name: 'Margarita', id: 'f2', precio: 0.78, description: 'Evoca la inocencia y la pureza, y es un símbolo de lealtad y confianza.', img: '../IMG/margarita.jpg',
colores: [
{
name: 'Naranja',
rgb: 'rgb(250, 184, 41)',
img: '../IMG/Margarita naranja.webp'
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/margarita.webp'
},
{
name: 'Rosa',
rgb: 'rgb(253, 132, 217)',
img: '../IMG/margarita rosa.webp'
},
{
name: 'Amarilla',
rgb: 'rgb(244, 244, 71)',
img: '../IMG/margarita amarilla.webp'
},
]
},
{
name: 'Tulipán', id: 'f3', precio: 0.50, description: ' Simboliza el amor perfecto y la fama, con una forma elegante y variedad de colores.', img: '../IMG/tulipan.jpg',
colores: [
{
name: 'Rosado',
rgb: 'rgb(248, 140, 203)',
img: '../IMG/tulipan rosado.webp'
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/tulipan blanco.webp'
},
{
name: 'Morado',
rgb: 'rgb(136, 7, 97)',
img: '../IMG/tulipan morado.webp'
},
{
name: 'Amarillo',
rgb: 'rgb(244, 244, 71)',
img: '../IMG/tulipan amarillo.webp'
},
]
},
{
name: 'Dalia', id: 'f4', precio: 0.34, description: ' Representa la dignidad y la elegancia, con una variedad de formas y colores.', img: '../IMG/dalia.jpg',
colores: [
{
name: 'Rosado',
rgb: 'rgb(248, 140, 203)',
img: '../IMG/dalia rosada.webp'
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/dalia blanca.webp'
},
{
name: 'Naranja',
rgb: 'rgb(250, 107, 24)',
img: '../IMG/dalia naranja.webp'
},
{
name: 'Amarillo',
rgb: 'rgb(244, 244, 71)',
img: '../IMG/dalia amarilla.webp'
},
]
},
{
name: 'Lirio', id: 'f5', precio: 0.67, description: 'Simboliza la pureza y la renovación, frecuentemente utilizado en celebraciones de amor y compasión.', img: '../IMG/lirio.jpg',
colores: [
{
name: 'Rosado',
rgb: 'rgb(248, 140, 203)',
img: '../IMG/lirio rosado.webp'
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/lirio blanco.webp'
},
{
name: 'Azul',
rgb: 'rgb(121, 163, 237)',
img: '../IMG/lirio azul.webp'
},
{
name: 'Amarillo',
rgb: 'rgb(244, 244, 71)',
img: '../IMG/lirio amarillo.webp'
},
]
},
{
name: 'Hortensia', id: 'f6', precio: 1, description: ' Simboliza la gratitud y la comprensión, conocida por sus grandes cabezas de flores.', img: '../IMG/hortensia.jpg',
colores: [
{
name: 'Rosado',
rgb: 'rgb(248, 140, 203)',
img: '../IMG/hortensia rosada.webp'
},
{
name: 'Blanco',
rgb: 'rgb(252, 252, 253)',
img: '../IMG/hortensia blanca.webp'
},
{
name: 'Azul',
rgb: 'rgb(121, 163, 237)',
img: '../IMG/hortensia azul.webp'
},
{
name: 'Amarillo',
rgb: 'rgb(244, 244, 71)',
img: '../IMG/hortensia amarilla.webp'
},
]
},
{
name: 'Magnolia', id: 'f7', precio: 0.40, description: ' Representa la nobleza y la perseverancia, con flores grandes y fragantes.', img: '../IMG/magnolia.jpg',
colores: [
{
name: 'Blanca',
rgb: 'rgb(254, 253, 254)',
img: '../IMG/magnolia blanca.webp'
},
{
name: 'Rosada',
rgb: 'rgb(244, 151, 225)',
img: '../IMG/magnolia rosada.webp'
},
]
},
]
const arrayOfertas = [
{ name: 'Cesta de Amapolas', color: 'Amarillas', description: 'Cesta pequeña', precio: 9, img: '../IMG/amapolas amarillas.png',precioAntes:'12,00 €' },
{ name: 'Cesta de Rosas', color: 'Naranja', description: 'Cesta grande', precio: 25, img: '../IMG/rosas naranjas.jpg',precioAntes:'30,00 €'},
{ name: 'Lirio', color: 'Azúl', description: 'flor', precio: 0.95, img: '../IMG/lirio-azul.webp',precioAntes:'2,00 €' },
{ name: 'Orquídea', color: 'Morado', description: 'flor', precio: 1, img: '../IMG/orquíea morada.jpg',precioAntes:'3,00€' },
]
const arrayCestas = [
{
name: 'Cesta Julia',
img: '../IMG/cesta1.jpg',
tamano: [
{ size: 'Small', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 },
{ size: 'Large', sizeDescrip: '(66cm diámetro, 37cm alto)', precio: 15 }
]
},
{
name: 'Cesta Luna',
img: '../IMG/cesta2.webp',
tamano: [
{ size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 },
]
},
{
name: 'Cesta Lousiana',
img: '../IMG/cesta3.jpg',
tamano: [
{ size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 },
]
},
{
name: 'Cesta París',
img: '../IMG/cesta4.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 },
]
},
{
name: 'Cesta Adelia',
img: '../IMG/cesta5.jpg',
tamano: [
{ size: 'Small (54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium (60cm diámetro, 31cm alto)', precio: 10 },
]
},
]
const arrayMolde = [
{
name: 'Molde circular',
img: '../IMG/moldecircular.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 8cm alto)', precio: 4 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 12cm alto)', precio: 8 },
{ size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 11 }
]
},
{
name: 'Molde de corazón',
img: '../IMG/moldecorazón.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 6 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 },
{ size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 11 }
]
},
{
name: 'Molde estrella',
img: '../IMG/moldeestrella.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 5 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 9 },
]
},
{
name: 'Molde oso',
img: '../IMG/moldeoso.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 10 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 14 },
{ size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 16 }
]
},
{
name: 'Molde rectangular',
img: '../IMG/molderectangular.jpg',
tamano: [
{ size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 3 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 12 },
]
},
]
const arrayJarrones = [
{
name: 'Jarrón Francia',
img: '../IMG/jarron1.webp',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 4 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 9 },
{ size: 'Large', sizeDescrip: ' (66cm diámetro, 37cm alto)', precio: 15 }
]
},
{
name: 'Jarrón Canadá',
img: '../IMG/jarron2.jpg',
tamano: [
{ size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 8 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 17 },
]
},
{
name: 'Jarrón Suiza',
img: '../IMG/jarron3.jpg',
tamano: [
{ size: 'Small (54cm diámetro, 25cm alto)', precio: 4 },
{ size: 'Medium (60cm diámetro, 31cm alto)', precio: 8 },
]
},
{
name: 'Jarrón Cuba',
img: '../IMG/jarron4.jpg',
tamano: [
{ size: 'Small (54cm diámetro, 25cm alto)', precio: 5 },
{ size: 'Medium (60cm diámetro, 31cm alto)', precio: 11 },
]
},
{
name: 'Jarrón Egipto',
img: '../IMG/jarron5.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 7 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 13 },
]
},
]
const arrayEnvolturas = [
{
name: 'Envoltura Rufi',
img: '../IMG/hojasdeenvolturadeflores3.avif',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 2 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 5 },
{ size: 'Large', sizeDescrip: ' (66cm diámetro, 37cm alto)', precio: 9 }
]
},
{
name: 'Envoltura Lula',
img: '../IMG/hojasenvolturadeflores4.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 2 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 },
]
},
{
name: 'Envoltura Nerla',
img: '../IMG/hojasenvolturadeflores5.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 3 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 8 },
]
},
{
name: 'Envoltura Lara',
img: '../IMG/hojasenvolturadeflores1.webp',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 5 },
{ size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 11 },
]
},
{
name: 'Envoltura Soria',
img: '../IMG/hojasenvolturadeflores2.jpg',
tamano: [
{ size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 7 },
{ size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 13 },
]
},
]
const arrayMensaje = [
{ name: 'Mensaje1', img: '../IMG/papelmensaje1.jpg' },
{ name: 'Mensaje2', img: '../IMG/papelmensaje2.jpg' },
{ name: 'Mensaje3', img: '../IMG/papelmensaje3.jpg' },
{ name: 'Mensaje4', img: '../IMG/papelmensaje4.jpg' },
]
/* INICIO SESIÓN */
const formMainContainer = document.getElementById('form_main_container')
const userData = {}
let password
/* Delegación de eventos 'click' */
const loginContainer = document.getElementById('div_container_login')
const registerContainer = document.getElementById('div_container_register')
function translateY() {
registerContainer.style.transform = 'translateX(calc(-100% - 60px))'
loginContainer.style.transform = 'translateX(calc(-100% - 60px))'
}
function translateYback() {
registerContainer.style.transform = 'translateX(0%)'
loginContainer.style.transform = 'translateX(0%)'
}
formMainContainer.addEventListener('click', (e) => {
const target = e.target.id
switch (target) {
case 'enlace_registro':
translateY()
break;
case 'enlace_incio_sesion':
translateYback()
break;
default:
break;
}
})
/* Expresiones Regulares */
const regexName = /^[a-zA-Z]+([-\s][a-zA-Z]+)*$/;
const regexEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const regexPassword = /^[a-zA-Z0-9\W]{1,20}$/;
const regexTel = /^[0-9]{1,9}$/;
/* función estilos para datos correctos e incorrectos */
const rightStylesInputs = ( icon, input, errorMessage) => {
errorMessage.classList.remove('styles_error_message')
icon.classList.remove('styles_error_message')
icon.classList.add('style_right_icon')
input.classList.add('style_right_input')
}
const wrongStylesInputs = ( icon, input, errorMessage) => {
errorMessage.classList.add('styles_error_message')
icon.classList.add('styles_error_message')
icon.classList.remove('style_right_icon')
input.classList.remove('style_right_input')
}
const defaultStylesInputs = ( icon, input, errorMessage) => {
icon.classList.remove('style_right_icon')
input.classList.remove('style_right_input')
errorMessage.classList.remove('styles_error_message')
icon.classList.remove('styles_error_message')
}
/* función reutilizable */
const validInputFunction = (e, regex, icon, input, errorMessage) => {
const target = e.target
const targetId = e.target.id
let targetValue = target.value
if (regex.test(target.value)) {
rightStylesInputs( icon, input, errorMessage)
switch (targetId) {
case 'input_full_name':
userData.name = target.value
target.dataset.boolean = 'true'
break;
case 'input_create_email':
userData.email = target.value
target.dataset.boolean = 'true'
break;
case 'input_tel':
userData.phoneNumber = target.value
target.dataset.boolean = 'true'
break;
case 'input_create_password':
password = target.value
target.dataset.boolean = 'true'
break;
}
} else if (targetValue.trim() === '') {
defaultStylesInputs( icon, input, errorMessage)
target.dataset.boolean = 'false'
} else {
wrongStylesInputs( icon, input, errorMessage)
target.dataset.boolean = 'false'
}
}
const confirmPassword = (target, icon, input, errorMessage) => {
if (password !== undefined && password === target.value) {
userData.password = target.value
rightStylesInputs( icon, input, errorMessage)
target.dataset.boolean = 'true'
} else {
wrongStylesInputs( icon, input, errorMessage)
}
}
/* comprobar datos guardados en localStorage */
const userDataValidation = (target, targetId, icon, input, errorMessage) => {
const objectUserData = JSON.parse(localStorage.getItem('userData'))
switch (targetId) {
case 'input_email':
if (objectUserData.email === target.value) {
rightStylesInputs(icon,input,errorMessage)
target.dataset.boolean = 'true'
} else {
wrongStylesInputs(icon,input,errorMessage)
target.dataset.boolean = 'false'
}
break;
case 'input_password':
if (objectUserData.password === target.value) {
rightStylesInputs(icon,input,errorMessage)
target.dataset.boolean = 'true'
} else {
wrongStylesInputs(icon,input,errorMessage)
target.dataset.boolean = 'false'
}
break;
}
}
/* Delegación de eventos para inputs*/
formMainContainer.addEventListener('input', (e) => {
const targetId = e.target.id
const target = e.target
let parentNode = target.closest('.div_input')
const errorMessage = parentNode.querySelector('.error_message')
const icon = parentNode.querySelector('.icon')
const input = parentNode.querySelector('.input')
switch (targetId) {
case 'input_email':
userDataValidation(target, targetId, icon, input, errorMessage)
/* funcion que compare el email guardado en localStorage */
break;
case 'input_password':
userDataValidation(target, targetId, icon, input, errorMessage)
/* confirmar con la creada en localStorage también */
break;
case 'input_full_name':
validInputFunction(e, regexName, icon, input, errorMessage)
break;
case 'input_create_email':
validInputFunction(e, regexEmail, icon, input, errorMessage)
break;
case 'input_tel':
validInputFunction(e, regexTel, icon, input, errorMessage)
break;
case 'input_create_password':
validInputFunction(e, regexPassword, icon, input, errorMessage)
break;
case 'input_confirm_password':
confirmPassword(target, icon, input, errorMessage)
break;
default:
break;
}
})
/* Enviar datos */
const registerForm = document.getElementById('form_register')
registerForm.addEventListener('submit', (e) => {
e.preventDefault()
const form = e.target.closest('.form')
let nodeListInputs = form.querySelectorAll('.input')//saco el NodeList porque son elemnetos del DOM
let arrayInputs = Array.from(nodeListInputs)//convertir a array para que el método every() funcione ya que hay métodos que no funcionan con el nodelist
console.log(form.id)
//confirma si todos los inputs son correctos (true) o si hay alguno falso, con el método every() estoy preguntando si todos cumplen cierta condición
function boolean(arrayInputs) {
const resultadoBooleano = arrayInputs.every((input) =>{
if (input.dataset.boolean === 'true') {
return true
} else {
return false
}
})
return resultadoBooleano
}
if (boolean(arrayInputs)) {
switch (form.id) {
case 'form_register':
localStorage.setItem('userData',JSON.stringify(userData))
translateYback()
break;
case 'form_login':
//función que me lleve a la página de la cesta de compra con el artículo al que le dió añadir a cesta antes de registrarse
break;
}
} else {
window.alert('Rellene los datos correctamente por favor🙏. ')
}
})
/* CARRITO */
/* evento click en icono cesta */
const iconoCesta1 = document.getElementById('icono_cesta1')
const iconoCesta2 = document.getElementById('icono_cesta2')
const mensajeNoHayArticulos = document.getElementById('mensaje_no_hay_articulos')
const totalCesta = document.querySelector('.total_cesta')
const validacionCarritoVacioOno = ()=>{
if(carrito.length === 0){
mensajeNoHayArticulos.style.display = 'block'
}else{
mensajeNoHayArticulos.style.display = 'none'
}
}
iconoCesta1.addEventListener('click',()=>{
validacionCarritoVacioOno()
})
iconoCesta2.addEventListener('click',()=>{
validacionCarritoVacioOno()
})
const totalCantidadEnCesta = (carritoParametro) => {
const total = carritoParametro.reduce((acumulador, articulo) => {
return articulo.cantidad + acumulador
}, 0)
mostrarCantidadEnCesta.textContent = total
}
const subTotal = (articulo,pTotal) => {
articulo.total = articulo.cantidad * articulo.price
pTotal.textContent = `${articulo.total.toFixed(2)} €`
}
const totalCarrito = ()=>{
const resultado = carrito.reduce((acc,obj)=>{
return obj.total + acc
},0)
totalCesta.textContent = resultado.toFixed(2) + '€'
}
const mostrarCantidadEnCesta = document.querySelector('.mostrar_cantidad_en_cesta')
const formCarrito = document.getElementById('form_cesta')
const renderizarEnCarrito = (carritoParametro) => {
formCarrito.innerHTML = ''
carritoParametro.forEach((articulo) => {
const cajaArticulo = document.createElement('div')
cajaArticulo.className = 'caja_articulo'
cajaArticulo.innerHTML = `
${articulo.name}
${articulo.name} de color : ${articulo.flowerColor}
Precio:
${articulo.price.toFixed(2)}€
Total:
${articulo.total.toFixed(2)}€
`
formCarrito.append(cajaArticulo)
const iconPlus = cajaArticulo.querySelector('.icon_plus')
const iconMinus = cajaArticulo.querySelector('.icon_minus')
const iconDelete = cajaArticulo.querySelector('.delete')
const inputCantidad = cajaArticulo.querySelector('.input_cantidad')
const pTotal = cajaArticulo.querySelector('.total')
iconPlus.addEventListener('click', () => {
articulo.cantidad = articulo.cantidad + 1
inputCantidad.value = articulo.cantidad
subTotal(articulo,pTotal)
totalCantidadEnCesta(carritoParametro)
totalCarrito()
})
iconMinus.addEventListener('click', () => {
if (inputCantidad.value === '0') return
articulo.cantidad = articulo.cantidad - 1
inputCantidad.value = articulo.cantidad
subTotal(articulo,pTotal)
totalCantidadEnCesta(carritoParametro)
totalCarrito()
})
iconDelete.addEventListener('click', (e) => {
const targetId = e.target.id
carrito = carrito.filter(obj => obj.id !== targetId)
totalCantidadEnCesta(carrito)
renderizarEnCarrito(carrito)
validacionCarritoVacioOno()
totalCarrito()
})
})
}
/* btn pagar y mandar datos del carrito a /HTML/pago.html */
const btnPagar = document.getElementById('pagar')
btnPagar.addEventListener('click',()=>{
const carritoJSON = JSON.stringify(carrito)
/* codifico el carrito para poderlo pasar dentro de una url */
const codificarCarrito = new URLSearchParams({data: carritoJSON}).toString()
window.location.href = `pago.html?${codificarCarrito}`
})
/* PAGO */
function limitLength(event, number) {
const input = event.target;
const value = input.value;
let maxLength = number; // Límite de tantos dígitos
// Si el valor excede el máximo permitido, se recorta
if (value.length > maxLength) {
input.value = value.slice(0, maxLength);
}
}
/*RECIBIR DATOS DEL ARRAY POR PARÁMETROS EN UNA URL*/
/* busco parámetro en la URL */
const urlParametros = new URLSearchParams(window.location.search)
/* obtengo el dato guardado en el parámetro con el nombre 'data'; que es un array con objetos de tipo String */
const arrayParametro = urlParametros.get('data')
/*para poderlo utilizar convertir a tipo objeto */
let arrayCarrito = JSON.parse(arrayParametro)
console.log(arrayCarrito)
/* variables globales */
let subtotal
let totalPagar
let objDirecc = {}
let objTarjeta = {}
/* RENDERIZADO DE LOS DATOS DEL ARRAY */
const divSectionResumen = document.getElementById('div_section_resumen')
const contenedorPadre = document.getElementById('div_container')
const divListAside = document.getElementById('div_list_aside')
const sectionResumen = document.getElementById('section_resumen')
const sectionDatosEnvios = document.getElementById('section_datos_envio')
const sectionDatosTarjeta = document.getElementById('section_datos_tarjeta')
const sectionRecibo = document.getElementById('section_recibo')
const loading = document.getElementById('loading')
const mostrarTotalSectionPago = document.getElementById('mostrar_total_pago2')
/* RESUMEN RESUMEN RESUMEN */
const subtotalResumen = document.getElementById('subtotal_resumen')
const contenedorMensaje = document.getElementById('contenedor_nota_regalo')
/* funciones de cálculo */
const calcularSubTotal = (arrayCarrito) => {
subtotal = arrayCarrito.reduce((acc, obj) => {
return obj.total + acc
}, 0)
subtotalResumen.textContent = subtotal.toFixed(2) + ' €'
}
const mostrarimpuestoIva = document.getElementById('impuesto_iva')
const calcularIva = () => {
let iva = (subtotal + 3.50) / 100 * 21
mostrarimpuestoIva.textContent = iva.toFixed(2) + ' €'
return iva
}
const mostrartotalPagar = document.getElementById('total_pagar_resumen')
const calcularTotal = () => {
totalPagar = calcularIva() + 3.50 + subtotal
mostrartotalPagar.textContent = totalPagar.toFixed(2) + ' €'
}
/* RENDERIZADO */
const renderizado = (arrayCarrito) => {
divSectionResumen.innerHTML = ''
calcularSubTotal(arrayCarrito)
calcularIva()
calcularTotal()
arrayCarrito.forEach((objeto) => {
const cajaProducto = document.createElement('div')
cajaProducto.className = 'caja_producto'
cajaProducto.id = `${objeto.id}`
cajaProducto.innerHTML = `
${objeto.tamanoCesta}
${objeto.name} color ${objeto.flowerColor}
Cantidad de cestas
${objeto.cantidadCesta}
Cada cesta contiene ${objeto.cantidadFlores} ${objeto.name}
Total:
${objeto.total.toFixed(2)} €
`
divSectionResumen.append(cajaProducto)
const iconDelete = cajaProducto.querySelector('.delete')
iconDelete.addEventListener('click', (e) => {
const targetId = e.target.id
arrayCarrito = arrayCarrito.filter(obj => obj.id !== targetId)
renderizado(arrayCarrito)
calcularSubTotal(arrayCarrito)
calcularIva()
calcularTotal()
})
});
}
renderizado(arrayCarrito)
let inputRadioActivadoId
const textareaMensaje = document.getElementById('textarea_mensaje_regalo')
/* delegación de evento para input radio mensaje de regalo*/
divSectionResumen.addEventListener('change', (e) => {
if (e.target && e.target.classList.contains('mostrar_ms')) {
const btn = e.target
if (btn.checked) {
inputRadioActivadoId = btn.id
textareaMensaje.innerHTML = ''
contenedorMensaje.style.display = 'block'
console.log('input clicado ' + inputRadioActivadoId)
} else {
contenedorMensaje.style.display = 'none'
}
}
})
const btnGuardarMensaje = document.getElementById('btn_guardar_mensaje')
btnGuardarMensaje.addEventListener('click', () => {
const objeto = arrayCarrito.find(obj => obj.id === inputRadioActivadoId)
objeto.mensaje = textareaMensaje.value
textareaMensaje.value = ''
const divMensaje = document.getElementById(`div_ms_${inputRadioActivadoId}`)
divMensaje.innerHTML = ''
divMensaje.innerHTML = `
Editar mensaje
Eliminar mensaje
`
contenedorMensaje.style.display = 'none'
})
/* delegación de evento en article con clases*/
const cerrarMensaje = document.getElementById('cerrar_mensaje')
cerrarMensaje.addEventListener('click', () => {
contenedorMensaje.style.display = 'none'
textareaMensaje.value = ''
})
const btnResumenArticulos = document.getElementById('pagar_resumen')
btnResumenArticulos.addEventListener('click', () => {
sectionResumen.style.display = 'none'
sectionDatosEnvios.style.display = 'block'
document.querySelector('.li_1').classList.remove('active')
document.querySelector('.li_2').classList.add('active')
console.log(mostrartotalPagar.textContent)
arrayCarrito.totalApagar = parseFloat(mostrartotalPagar.textContent)
mostrarTotalSectionPago.textContent = arrayCarrito.totalApagar + ' €'
})
/* DATOS DE ENVÍO DATOS DE ENVÍO DATOS DE ENVÍO */
const regexNombre = /^[a-zA-Z\s]{1,80}$/
const regexCp = /^[0-9]{1,8}$/
/* Delegación de eventos de inputs de todo el contenedor padre de las sections */
const article = document.getElementById('article')
const placeholderFake = document.querySelector('.placeholder_fake')
article.addEventListener('input', (e) => {
const target = e.target
const targetId = target.id
const targetValue = target.value
let msError = target.nextElementSibling
switch (targetId) {
case 'input_nombre',
'input_apellidos',
'input_envio_nomb_apell':
if (regexNombre.test(targetValue)) {
msError.style.display = 'none'
} else {
target.value = targetValue.slice(0, -1)
msError.style.display = 'block'
}
break;
case 'input_numero_tarjeta',
'input_expiracion',
'input_c_seguridad':
if (regexCp.test(targetValue)) {
msError.style.display = 'none'
} else {
target.value = targetValue.slice(0, -1)
msError.style.display = 'block'
}
break;
default:
break;
}
})
/* delegación de eventos click en article por id , clases y parentNode */
const ulCountryCode = document.getElementById('ul_country_code')
const inputTel = document.getElementById('input_telefono')
article.addEventListener('click', (e) => {
const target = e.target
const parentNode = target.parentNode
/* por parentNode id */
switch (parentNode.id) {
case 'cambiante':
ulCountryCode.style.display = 'block'
break;
default:
break;
}
if (parentNode.className === 'option') {
placeholderFake.innerHTML = ''
const optionHtml = parentNode.innerHTML
placeholderFake.innerHTML = optionHtml
placeholderFake.style.opacity = 1
ulCountryCode.style.display = 'none'
inputTel.focus()
}
/* por clase */
const objId = parentNode.id
const obj = arrayCarrito.find(obj => obj.id === objId)
switch (target.className) {
case 'editar_ms':
contenedorMensaje.style.display = 'block'
textareaMensaje.value = obj.mensaje
break;
case 'borrar_ms':
delete obj.mensaje
textareaMensaje.value = ''
contenedorMensaje.style.display = 'none'
const divMensaje = document.getElementById(`div_ms_${objId}`)
divMensaje.innerHTML = ''
divMensaje.innerHTML = `
`
break;
default:
break;
}
})
/* submit */
const guardarDireccion = document.getElementById('guardar_direcc')
const inputNombApll = document.getElementById('input_envio_nomb_apell')
const inputDirecc = document.getElementById('input_envio_direcc')
const inputProv = document.getElementById('input_provincia')
const inputCp = document.getElementById('input_cp')
const formDatosEnvio = document.getElementById('form_datos_envio')
formDatosEnvio.addEventListener('submit', (e) => {
const codigPais = document.querySelector('#cambiante span')
sectionDatosEnvios.style.display = 'none'
sectionDatosTarjeta.style.display = 'block'
document.querySelector('.li_2').classList.remove('active')
document.querySelector('.li_3').classList.add('active')
arrayCarrito.envio = objDirecc
objDirecc.nombApll = inputNombApll.value
objDirecc.direcc = inputDirecc.value
objDirecc.prov = inputProv.value
objDirecc.codP = inputCp.value
objDirecc.tel = codigPais.textContent + inputTel.value
e.preventDefault()
console.log(arrayCarrito)
htmlDireccEntrega(objDirecc)
})
/* PAGO PAGO PAGO */
const punticosNodeList = document.querySelectorAll('.punticos')
const inputTitular = document.getElementById('input_nombre')
const inputTitularApell = document.getElementById('input_apellidos')
const inputNumTarj = document.getElementById('input_numero_tarjeta')
const inputExpiracion = document.getElementById('input_expiracion')
const inputCodSeg = document.getElementById('input_c_seguridad')
const inputEmail = document.getElementById('input_email')
const formDatosTarjeta = document.getElementById('form_datos_tarjeta')
formDatosTarjeta.addEventListener('submit', (e) => {
sectionDatosTarjeta.style.display = 'none'
loading.style.display = 'block'
loading.dataset.value = '1'
document.querySelector('.li_3').classList.remove('active')
document.querySelector('.li_4').classList.add('active')
arrayCarrito.tarjeta = objTarjeta
objTarjeta.titular = inputTitular.value
objTarjeta.titularApell = inputTitularApell.value
objTarjeta.tarjeta = inputNumTarj.value
objTarjeta.expiracion = inputExpiracion.value
objTarjeta.codSeg = inputCodSeg.value
objTarjeta.email = inputEmail.value
e.preventDefault()
if (loading.dataset.value === '1') {
let contador = 0
let intervalo = setInterval(() => {
if (contador === 5) {
clearInterval(intervalo)
punticosNodeList.forEach(puntico => {
puntico.classList.remove('animacion_activa')
})
loading.style.display = 'none'
sectionRecibo.style.display = 'block'
console.log(arrayCarrito)
}
punticosNodeList.forEach(puntico => {
puntico.classList.add('animacion_activa')
})
contador += 1
}, 2000)
}
})
/* RECIBO RECIBO RECIBO */
const fecha = document.getElementById('fecha_compra')
const date = new Date()
fecha.textContent = `${date.getDate()}/${date.toLocaleString("default",{month:'long'})}/${date.getFullYear()}`
const NumEnvio = document.getElementById('numero_envio')
NumEnvio.textContent = `${Math.floor(Math.random() * 100) + 1}`// + 1 para que incluya el 100
const copiaDate = new Date(date)
copiaDate.setDate(date.getDate() + 7)
const plazoEntrega = document.querySelector('#plazo_entrega')
plazoEntrega.textContent = `${copiaDate.getDate()}/${copiaDate.toLocaleString("default",{month:'long'})}/${copiaDate.getFullYear()}`
function htmlDireccEntrega (objeto){
const pDirecc = document.getElementById('direcc_entreg')
const caja = document.createElement('div')
caja.className = 'd_envio'
caja.innerHTML= `
Enviar a:
${objeto.nombApll}
Dirección de envío:
${objeto.direcc}
${objeto.prov}
${objeto.codP}
Teléfono:
${objeto.tel}
`
pDirecc.append(caja)
}
/* CRÉALO TU MISMO */
const titulo = document.getElementById('titulo_opcion')
const contenedorDinamico = document.getElementById('contenedor_dinamico')
const opcionesSeleccion = document.getElementById('opciones_seleccion')
const body = document.getElementById('body')
const h3 = document.getElementById('h3')
const mostrar = document.getElementById('mostrar')
function productoXdefecto(array, arrayMensaje) {
mostrar.innerHTML = ''
h3.innerText = ''
//IMG por defecto
const obj1 = array[0]
h3.innerText = obj1.name
mostrar.innerHTML = `
`
const divTamano = mostrar.querySelector('#div_tamano')
obj1.tamano.forEach((tamano) => {
const div2 = document.createElement('div')
div2.className = 'div2'
div2.innerHTML = `
${tamano.size}
${tamano.sizeDescrip}
${tamano.precio.toFixed(2)} €
`
divTamano.append(div2)
})
const mensaje1 = mostrar.querySelector('#mensaje')
arrayMensaje.forEach((mensaje) => {
const div2 = document.createElement('div')
div2.className = 'div_mensaje'
div2.innerHTML = `
${mensaje.name}
`
mensaje1.append(div2)
})
}
function renderizar(arrayProducto, arrayMensaje, label) {
titulo.innerText = label
titulo.style.textTransform = 'uppercase'
opcionesSeleccion.innerHTML = ''
arrayProducto.forEach((item) => {
const caja = document.createElement('div')
caja.innerHTML = `
${item.name}
`
opcionesSeleccion.append(caja)
/* item.addEventListener('click',()=>{
}) */
});
productoXdefecto(arrayProducto,arrayMensaje)
}
renderizar(arrayCestas, arrayMensaje, arrayCestas[0].name)
body.addEventListener('click', (e) => {
const label = e.target.closest('label')//propagación de evento burbuja, de lo contrario no entra al switch xq el id de la 'img' o la 'p' no coincide .
const labelId = label.id
switch (labelId) {
case 'cestas'://quitar éste de aquí y ponerlo fuera para que salga siempre por defecto en la página
renderizar(arrayCestas, arrayMensaje, labelId)
break;
case 'jarrones':
renderizar(arrayJarrones, arrayMensaje, labelId)
break;
case 'moldes':
renderizar(arrayMolde, arrayMensaje, labelId)
break;
case 'envolturas':
renderizar(arrayEnvolturas, arrayMensaje, labelId)
break;
default:
break;
}
})